Anlegen und einfügen einer Tabelle mittels Migrations-Datei

In diesem Forum gibt es Starthilfe zum neuen Extension-System von phpBB 3.1/3.2. Fragen zur Entwicklung von Extensions und zur Konvertierung von phpBB 3.0.x MODs sind ebenfalls willkommen.
Benutzeravatar
Mike-on-Tour
Supporter
Supporter
Beiträge: 1076
Registriert: 13.01.2020 21:09
Kontaktdaten:

Re: Anlegen und einfügen einer Tabelle mittels Migrations-Datei

Beitrag von Mike-on-Tour »

Fast richtig.

= bedeutet "gleich", also in diesem Falle exakt 25 WM-Punkte.

Wenn mindestens 25 WM-Punkte für die Auswahl gefragt wären, würde es >=, also "größer oder gleich 25" heißen.

Mach bitte keine Annahmen, sondern lies es in der Dokumentation zum entsprechenden Produkt nach (und auch für MySQL liefert google genügend Fundstellen für das Stichwort "logische Operatoren").
Und wenn du schon dabei bist dann google auch mal den Befehl count, dann verstehst du auch, was bei dieser Abfrage als Ergebnis überhaupt gewünscht wird.
Lesen bildet :D
Benutzeravatar
chris1278
Mitglied
Beiträge: 3533
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: Anlegen und einfügen einer Tabelle mittels Migrations-Datei

Beitrag von chris1278 »

Ok bei count hab ich aus dem bauch übersetzt als Zähler allgemein. Ich hab jetzt gegoogelt und da wird der wert der in einer spalte steht also wenn mehr als eine Zeile dann alle werte der spalte gezählt die eine gewisse Bedingung erfüllen. Wie gesagt ich habe das was DR.Death geschrieben hat im Groben vereinfacht versucht zu übersetzen.
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17400
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Re: Anlegen und einfügen einer Tabelle mittels Migrations-Datei

Beitrag von Dr.Death »

Code: Alles auswählen

GROUP BY wm_driver
Ist nicht aus der Gruppe wm_driver
Es werden alle gefunden Zeilen nach einer bestimmten Spalte "gruppiert".

Eise sehr gute Erklärung dazu:
https://www.datenbanken-verstehen.de/sq ... by-befehl/

In meiner Tabelle $table_wm wird nach jedem Rennen pro Fahrer ID die erreichte Punktzahl eingetragen.
Wenn Verstappen bei 3 Rennen 25 Punkte bekam, in 2 Rennen 10 und in einem Rennen 6, dann würde diese Abfrage
für Verstappen eine "3" rauswerfen ( Sprich 3 Goldmedaillen )
Benutzeravatar
chris1278
Mitglied
Beiträge: 3533
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: Anlegen und einfügen einer Tabelle mittels Migrations-Datei

Beitrag von chris1278 »

Ok das habe ich Verstanden. Dr.Death hast du hier noch mein edit gesehen:

viewtopic.php?p=1413386#p1413386

@edit

Kannst frage vergessen. Hab probiert und es funktioniert einwandfrei.

@edit2

Also ich hab mal just for fun den einen Insert into befehl noch umgebaut variabeln für die werte einzutragen.

Kannst du mir mal sagen was du davon hälst in bezug auf aufbau und Codierung:

Code: Alles auswählen

	
	$chris1278_name = "storage_version";
	$chris1278_value = "cookie";
		
	$sql = 'INSERT INTO ' . $this->table_prefix . 'chris1278_cookie  (chris1278_name, chris1278_value) 
		VALUES ("' . $chris1278_name . '", "' . $chris1278_value . '")';
	$this->db->sql_query($sql);
Hier musste ich ein wenig probieren weil da ja zwei variablen rein müssen für die werte.
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17400
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Re: Anlegen und einfügen einer Tabelle mittels Migrations-Datei

Beitrag von Dr.Death »

Nichts...

warum liest du nicht die Coding Guidelines ?

https://area51.phpbb.com/docs/dev/maste ... sql-layout

Dort findest Du die korrekten Beispiele für INSERT:

Code: Alles auswählen

$sql_ary = array(
	'chris1278_name'	=> 'storage_version',
	'chris1278_value'	=> 'cookie',
);

$db->sql_query('INSERT INTO ' . $this->table_prefix . 'chris1278_cookie ' . $db->sql_build_array('INSERT', $sql_ary));
Es hat schon seine Gründe die vorgegeben Funktionen wie z.B. sql_build_array() zu nutzen..... besonders wenn man mal anfängt Variablen zu übergeben deren Herkunft oder Inhalt nicht kennt.
Benutzeravatar
chris1278
Mitglied
Beiträge: 3533
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: Anlegen und einfügen einer Tabelle mittels Migrations-Datei

Beitrag von chris1278 »

Da hatteich das hier gefunden:

Code: Alles auswählen

$sql_ary = array(
	'somedata'		=> $my_string,
	'otherdata'		=> $an_int,
	'moredata'		=> $another_int,
);

$db->sql_query('INSERT INTO ' . SOME_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));
Und versucht das versucht zu nutzen für insert aber das hat so nicht geklappt mit dieser version:

'somedata' => $my_string,

ok ich sehe du hast diese $... nach den => durch angaben in hochkommas ersetzt. Auf die Idee mus man auch erstmal kommen.

@edit

Also das hier z.B. kann ich nutzen und funktioniert:

$this->db->sql_build_array ebenso dies hier: $this->db->sql_query($sql);

aber sobald ich das hier lade: $db->sql_query oder dies hier: $db->sql_build_array

quittiert mir mein testserver mit ner fehlermeldung von wegen:
Fatal error: Uncaught Error: Call to a member function sql_build_array() on null in C:\xampp\73\htdocs\wwh\ext\chris1278\cookie\migrations\v_1_0_4.php:37 Stack trace: #0 [internal function]: chris1278\cookie\migrations\v_1_0_4->import_optin(NULL) #1 C:\xampp\73\htdocs\wwh\phpbb\db\migrator.php(714): call_user_func_array(Array, Array) #2 C:\xampp\73\htdocs\wwh\phpbb\db\migrator.php(661): phpbb\db\migrator->run_step(Array, NULL, false) #3 C:\xampp\73\htdocs\wwh\phpbb\db\migrator.php(436): phpbb\db\migrator->process_data_step(Array, Array) #4 C:\xampp\73\htdocs\wwh\phpbb\db\migrator.php(288): phpbb\db\migrator->try_apply('\\chris1278\\cook...') #5 C:\xampp\73\htdocs\wwh\phpbb\db\migrator.php(241): phpbb\db\migrator->update_do() #6 C:\xampp\73\htdocs\wwh\phpbb\extension\base.php(78): phpbb\db\migrator->update() #7 C:\xampp\73\htdocs\wwh\phpbb\extension\manager.php(231): phpbb\extension\base->enable_step(true) #8 C:\xampp\73\htdocs\wwh\includes\acp\acp_extensions.php(209): phpbb\extension\manager->enable_step('chris1278/cooki. in C:\xampp\73\htdocs\wwh\ext\chris1278\cookie\migrations\v_1_0_4.php on line 37

Dies hier lädt er ohne Probleme:

Code: Alles auswählen

	$sql_ary = array(
		'chris1278_name'	=> 'storage2_version',
		'chris1278_value'	=> 'cookie2',
	);
				
	$sql = ('INSERT INTO ' . $this->table_prefix . 'chris1278_cookie ' . $this->db->sql_build_array('INSERT', $sql_ary));
	$this->db->sql_query($sql);
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17400
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Re: Anlegen und einfügen einer Tabelle mittels Migrations-Datei

Beitrag von Dr.Death »

Die Fehlermeldung bekommst du , weil das Beispiel mit $db->sql_query() arbeitet, du aber mit $this->db->sql_query()

Du hast die Grundlagen leider immer noch nicht verstanden .... :-/

'somedata' => $my_string,

Da wird eine Variable übergeben mit einem Inhalt den du nicht kennst......

Da hätte auch stehen können:

Code: Alles auswählen

$my_string = 'Mein Haus';

$sql_ary = array(
	'somedata'		=> $my_string,
);
ist das gleiche wie:

Code: Alles auswählen

$sql_ary = array(
	'somedata'		=>  'Mein Haus',
);
Dir fehlen wirklich die GRUNDLAGEN.....

Mache doch mal ALLE Übungen auf https://www.php-kurs.com/
Hier angefangen:
https://www.php-kurs.com/erstes-php-programm.htm


Ich bin fürs nächste hier erstmal raus.....
Antworten

Zurück zu „Extension Bastelstube“