anpera.net https://anpera.homeip.net/phpbb3/ |
|
Wie sollte die SQL korrekt lauten? https://anpera.homeip.net/phpbb3/viewtopic.php?f=34&t=2820 |
Seite 1 von 1 |
Autor: | Morpheus [ Di 29 Aug, 2006 18:43 ] |
Betreff des Beitrags: | Wie sollte die SQL korrekt lauten? |
Auf Anregung eines Admins hier hab ich gesternNacht mal folgends Programm zusammen geschustert, um die Mondphasen im Spiel an zu geben. Was die SQL betrifft, hab ich jedoch allerschwerste Zweifel, ob sie so korrrekt ist. Würde bitte mal jemand, der etwas davon versteht, einenBlick darauf werfenund mir saegen, ob der SQL Teil so richtig ist und wenn nicht, wie er lauten muß? Ich wäre sehr dankbar dafür, denn ich betrette damit Neuland... In der PHP My Admin unter SQL ausführen: $this->bbcode_second_pass_code('', ' CREATE TABLE `monde` ( `mondnr` int( 10 ) unsigned NOT NULL auto_increment, `mondname` varchar(50) unsigned NOT NULL default '', `zyklus` int( 10 ) unsigned NOT NULL default '0', PRIMARY KEY ( `mondnr` ) ) TYPE = MYISAM ; ') Dann gib den Monden Namen, als Beispile siehst Du hier Erkan und Stefan, überleg Dir Mondzyklen (Tage, die der Mond benötigt, um einmal um den Planeten zu wandern, hier hab ich 32 und 40 genommen) und führe dann aus $this->bbcode_second_pass_code('', ' "INSERT INTO mond (mondname, zyklus) VALUES ('erkan', '32')"; "INSERT INTO mond (mondname, zyklus) VALUES ('stefan', '40')"; ') In der setnewday, z.B. hinter vendor: $this->bbcode_second_pass_code('', ' //Mondphasen by Morpheus $sql = "SELECT * FROM monde WHERE mondnr='zyklus'"; $result = db_query($sql); $row = db_fetch_assoc($result); $mz1=$row[erkan]; $mz2=$row[stefan]; $p1=kaum zu sehen; $p2=sichelförmig und zunehmend; $p3=halb und zunehmend; $p4=fast voll und zunehmend; $p5=voll; $p6=fast voll und abnehmend; $p7=halb und abnehmend; $p8=sichelförmig und abnehmend; if ($mz1==32){ $sql = "UPDATE monde SET zyklus= \""0"\" WHERE mondnr=''"; db_query($sql); }else{ $newm=($row[zyklus]+1); $sql = "UPDATE monde SET zyklus= \"".$newm."\" WHERE mondnr=''"; db_query($sql); } if ($mz2==40){ $sql = "UPDATE monde SET zyklus= \""0"\" WHERE mondnr=''"; db_query($sql); }else{ $newm=($row[zyklus]+1); $sql = "UPDATE monde SET zyklus= \"".$newm."\" WHERE mondnr=''"; db_query($sql); } if ($mz1<5){ $mo=$p1; }elseif (($mz1>=5) && ($mz1<9)){ $mo=$p2; }elseif (($mz1>=9) && ($mz1<13)){ $mo=$p3; }elseif (($mz1>=13) && ($mz1<17)){ $mo=$p4; }elseif (($mz1>=17) && ($mz1<21)){ $mo=$p5; }elseif (($mz1>=21) && ($mz1<25)){ $mo=$p6; }elseif (($mz1>=25) && ($mz1<29)){ $mo=$p7; }elseif (($mz1>=29) && ($mz1<33)){ $mo=$p8; } savesetting("erk",$mo); if ($mz2<6){ $mo1=$p1; }elseif (($mz2>=6) && ($mz1<11)){ $mo1=$p2; }elseif (($mz2>=11) && ($mz1<16)){ $mo1=$p3; }elseif (($mz2>=16) && ($mz1<21)){ $mo1=$p4; }elseif (($mz2>=21) && ($mz1<26)){ $mo1=$p5; }elseif (($mz2>=26) && ($mz1<31)){ $mo1=$p6; }elseif (($mz2>=31) && ($mz1<36)){ $mo1=$p7; }elseif (($mz2>=36) && ($mz1<41)){ $mo1=$p8; } savesetting("stef",$mo1); //Mondphasen Ende ') und schließlich in der newday.php suche $this->bbcode_second_pass_code('', ' output("`2`nDer Schmerz in deinen wetterfühligen Knochen sagt dir das heutige Wetter: `^".$settings['weather']."`2`n"); ') füge danach ein: $this->bbcode_second_pass_code('', ' //Mondphasen by Morpheus output("`2`nAm Himmel sind die 2 Monde, Erkan und Stefan zu sehen. Erkan ist `^".$settings['erk']."`2, Stefan ist `^".$settings['stef']."`2`n"); //Mondphasen Ende ') |
Autor: | Lestat [ Mi 30 Aug, 2006 00:02 ] |
Betreff des Beitrags: | |
Deine SQLs sehen für mich auf den ersten Blick ganz gut aus, bis auf wenige Kleinigkeiten: 1. Ändere $this->bbcode_second_pass_code('', '`mondname` varchar(50) unsigned NOT NULL default '',') in $this->bbcode_second_pass_code('', '`mondname` varchar(50) NOT NULL default '',') unsigned heisst ohne Vorzeichen, was bei Zeichenketten wenig Sinn macht, und einen Fehler verursacht. 2. Das $this->bbcode_second_pass_code('', 'TYPE = MYISAM') kannst du dir eigentlich sparen, da dann einfach der Standard-Tabellentyp verwendet wird (also in den meissten Fällen wohl auch MYISAM), aber wirklich stören tut es auch nicht. 3. Du solltest dich entscheiden, ob du deine Tabelle jetzt "monde" $this->bbcode_second_pass_code('', 'CREATE TABLE `monde` ( ') oder "mond" $this->bbcode_second_pass_code('', 'INSERT INTO mond...') nennen willst ![]() |
Autor: | Morpheus [ Mi 30 Aug, 2006 00:25 ] |
Betreff des Beitrags: | |
Lestat hat geschrieben: Deine SQLs sehen für mich auf den ersten Blick ganz gut aus, bis auf wenige Kleinigkeiten: 1. Ändere $this->bbcode_second_pass_code('', '`mondname` varchar(50) unsigned NOT NULL default '',') in $this->bbcode_second_pass_code('', '`mondname` varchar(50) NOT NULL default '',') unsigned heisst ohne Vorzeichen, was bei Zeichenketten wenig Sinn macht, und einen Fehler verursacht. Und wieder was gelernt, danke ![]() Zitat: 2. Das $this->bbcode_second_pass_code('', 'TYPE = MYISAM ') kannst du dir eigentlich sparen, da dann einfach der Standard-Tabellentyp verwendet wird (also in den meissten Fällen wohl auch MYISAM), aber wirklich stören tut es auch nicht. Ahja, danke, ich hab es immer dabei gemacht bisher, ohne recht zuwissen, was es bedeutet...na aj, ich lerne ja noch ![]() Zitat: 3. Du solltest dich entscheiden, ob du deine Tabelle jetzt "monde" $this->bbcode_second_pass_code('', 'CREATE TABLE `monde` ( ') oder "mond" $this->bbcode_second_pass_code('', 'INSERT INTO mond...') nennen willst ![]() AUTSCH! Ja, Flüchtigkeitsfehler ![]() Wobei ich, ganz ehrlich gesagt, mehr bedenken habe, sind folgende Teile: $this->bbcode_second_pass_code('', ' $sql = "SELECT * FROM monde WHERE mondnr='zyklus'"; $result = db_query($sql); $row = db_fetch_assoc($result); $mz1=$row[erkan]; $mz2=$row[stefan]; if ($mz1==32){ $sql = "UPDATE monde SET zyklus= ""0"" WHERE mondnr=''"; db_query($sql); }else{ $newm=($row[zyklus]+1); $sql = "UPDATE monde SET zyklus= "".$newm."" WHERE mondnr=''"; db_query($sql); } if ($mz2==40){ $sql = "UPDATE monde SET zyklus= ""0"" WHERE mondnr=''"; db_query($sql); }else{ $newm=($row[zyklus]+1); $sql = "UPDATE monde SET zyklus= "".$newm."" WHERE mondnr=''"; db_query($sql); } ') ich hab bisher immer nur solche Abfragen gemacht für table, deren Primary Key sich auf Personen bezogen, "Gegenstände" sind für mich Neuland...Aber ich danke Dir schon mal sehr für die Korrektur im oberen Teil, wenn das Ganze fertig ist, kommt es, natürlich getestet, in korrekter Form, in den Forenteil, in den es gehört ![]() ![]() |
Autor: | Morpheus [ Mi 30 Aug, 2006 00:29 ] |
Betreff des Beitrags: | |
Erste, korrigierte Fassung: $this->bbcode_second_pass_code('', ' CREATE TABLE `monde` ( `mondnr` int( 10 ) unsigned NOT NULL auto_increment, `mondname` varchar(50) NOT NULL default '', `zyklus` int( 10 ) unsigned NOT NULL default '0', PRIMARY KEY ( `mondnr` ) ) TYPE = MYISAM ; ') Dann gib den Monden Namen, als Beispile siehst Du hier Erkan und Stefan, überleg Dir Mondzyklen (Tage, die der Mond benötigt, um einmal um den Planeten zu wandern, hier hab ich 32 und 40 genommen) und führe dann aus Code: $this->bbcode_second_pass_code('', ' "INSERT INTO monde (mondname, zyklus) VALUES ('erkan', '32')"; "INSERT INTO monde (mondname, zyklus) VALUES ('stefan', '40')"; ') In der setnewday, z.B. hinter vendor: $this->bbcode_second_pass_code('', ' //Mondphasen by Morpheus $sql = "SELECT * FROM monde WHERE mondnr='zyklus'"; $result = db_query($sql); $row = db_fetch_assoc($result); $mz1=$row[erkan]; $mz2=$row[stefan]; $p1=kaum zu sehen; $p2=sichelförmig und zunehmend; $p3=halb und zunehmend; $p4=fast voll und zunehmend; $p5=voll; $p6=fast voll und abnehmend; $p7=halb und abnehmend; $p8=sichelförmig und abnehmend; if ($mz1==32){ $sql = "UPDATE monde SET zyklus= \""0"\" WHERE mondnr=''"; db_query($sql); }else{ $newm=($row[zyklus]+1); $sql = "UPDATE monde SET zyklus= \"".$newm."\" WHERE mondnr=''"; db_query($sql); } if ($mz2==40){ $sql = "UPDATE monde SET zyklus= \""0"\" WHERE mondnr=''"; db_query($sql); }else{ $newm=($row[zyklus]+1); $sql = "UPDATE monde SET zyklus= \"".$newm."\" WHERE mondnr=''"; db_query($sql); } if ($mz1<5){ $mo=$p1; }elseif (($mz1>=5) && ($mz1<9)){ $mo=$p2; }elseif (($mz1>=9) && ($mz1<13)){ $mo=$p3; }elseif (($mz1>=13) && ($mz1<17)){ $mo=$p4; }elseif (($mz1>=17) && ($mz1<21)){ $mo=$p5; }elseif (($mz1>=21) && ($mz1<25)){ $mo=$p6; }elseif (($mz1>=25) && ($mz1<29)){ $mo=$p7; }elseif (($mz1>=29) && ($mz1<33)){ $mo=$p8; } savesetting("erk",$mo); if ($mz2<6){ $mo1=$p1; }elseif (($mz2>=6) && ($mz1<11)){ $mo1=$p2; }elseif (($mz2>=11) && ($mz1<16)){ $mo1=$p3; }elseif (($mz2>=16) && ($mz1<21)){ $mo1=$p4; }elseif (($mz2>=21) && ($mz1<26)){ $mo1=$p5; }elseif (($mz2>=26) && ($mz1<31)){ $mo1=$p6; }elseif (($mz2>=31) && ($mz1<36)){ $mo1=$p7; }elseif (($mz2>=36) && ($mz1<41)){ $mo1=$p8; } savesetting("stef",$mo1); //Mondphasen Ende ') und schließlich in der newday.php suche $this->bbcode_second_pass_code('', ' output("`2`nDer Schmerz in deinen wetterfühligen Knochen sagt dir das heutige Wetter: `^".$settings['weather']."`2`n"); ') füge danach ein: $this->bbcode_second_pass_code('', ' //Mondphasen by Morpheus output("`2`nAm Himmel sind die 2 Monde, Erkan und Stefan zu sehen. Erkan ist `^".$settings['erk']."`2, Stefan ist `^".$settings['stef']."`2`n"); //Mondphasen Ende ') |
Autor: | Lestat [ Mi 30 Aug, 2006 00:51 ] |
Betreff des Beitrags: | |
Oh.. ist mir vorhin garnicht Aufgefallen, dass da noch SQLs im unteren Bereich folgen.. ![]() Dann mal los *gg* $this->bbcode_second_pass_code('', '$sql = "SELECT * FROM monde WHERE mondnr='zyklus'"; ') Hm.. im besten Fall liefert dir dieses SELECT einfach nichts zurück, aber ich denke es gibt sogar einen Fehler.. Du wählst nämlich sämtliche Spalten (SELECT *) aus der Tabelle Monde (FROM monde) aus, für welche gilt, dass die Mondnummer gleich der Zeichenkette 'zyklus' ist (WHERE mondnr='zyklus'). Aber da eine Mondnummer wohl kaum eine Zeichenkette sein kann, ist das ziemlich unsinnig. Ich vermute einfach du möchtest sämtliche Monde auslesen. und dann auf die einzelnen Daten, also vor allem den Zyklus zugreifen. Das geht z.b. so: $this->bbcode_second_pass_code('', '//Mondphasen by Morpheus $sql = "SELECT * FROM monde WHERE mondname='erkan'"; $result = db_query($sql); $row = db_fetch_assoc($result); $mz1=$row[zyklus]; ') Wenn du sämtliche Monde auf einmal auslesen möchtest, dann bau dir eine Schleife drumherum (als Anregung kannst du dir mal den Usereditor ansehen - user.php) Zu deinen UPDATE-querys: $this->bbcode_second_pass_code('', '$sql = "UPDATE monde SET zyklus= \""0"\" WHERE mondnr=''";') Das ganze gedöns um die Null kannst du weglassen, also etwa so $this->bbcode_second_pass_code('', '$sql = "UPDATE monde SET zyklus=0 WHERE mondnr=''";') Allerdings wird sich dann in deiner Datenbanktabelle nichts tun, denn die Abfrage wird nur auf die Zeilen angewendet, in denen die Mondnummer einer leeren Zeichenkette entspricht, und das ist niemals der Fall. Wahrscheinlicher willst du eher sowas wie: $this->bbcode_second_pass_code('', '$sql = "UPDATE monde SET zyklus=0 WHERE mondname='erkan'";') Ich hoffe ich konnte dir damit helfen ![]() ![]() |
Autor: | Morpheus [ Mi 30 Aug, 2006 04:35 ] |
Betreff des Beitrags: | |
Oh ja, Lestat, das konntest Du, denn genau das hatte ich gemeint...wenn ich heute Abend von der Arbeit komme werde ich die richtieg Funktion zusammen setzen, dann ist sie testreif. Vielen Dank für die kleien Lektion in SQL, denn nur so kann ich was lernen aus den Fehlern... ![]() ![]() |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |