SQL - Daten werden nicht in Tabelle eingefügt

  • Hallo,
    habe das Problem, dass ich eine neue Zeile zu einer Tabelle (housekeys) hinzufügen will. Damit die Zeilen nach Entstehungszeitpunkt sortiert bleiben, habe ich auch eine Sortiervariable (housecounter), die bei jedem Hinzufügen einer neuen Zeile für "houseid" eingesetzt und dann um 1 erhöht werden soll, für die nächste neue Zeile.
    Mein Code, den ich bis jetzt dazu hab, lautet:


    $sql = "INSERT INTO ".db_prefix("housekeys")." (ownerid, houseid, housecounter, housename, location) VALUES (".$session[user][acctid].", SELECT MAX(housecounter) FROM ".db_prefix("housekeys").", SELECT MAX(housecounter) FROM ".db_prefix("housekeys").", , ".get_module_pref("village").")";
    $sql = "UPDATE " .db_prefix("housekeys"). " SET housecounter = housecounter+1";
    db_query($sql);


    Das Problem: es kommt nichts in der Datenbank an. Gebe ich ihm über ein Formular die benötigten Daten (die werden weiter oben definiert), so werden diese nicht in die Tabelle eingetragen. Mit einer früheren Codeversion werden die Daten zwar eingetragen, sind aber weiterhin unsortiert, weil da noch nicht "housecounter" existiert. Der alte Code:


    $sql = "INSERT INTO ".db_prefix("housekeys")." (ownerid, houseid, housename, location) VALUES (".$session[user][acctid].", ".$session[user][acctid].", , ".get_module_pref("village").")";
    db_query($sql);


    Wo liegt nun mein Fehler, dass das nicht in der Datenbank erscheint/gibt es eine einfacherere Lösung, die Daten nach dem Eintragungszeitpunkt sortiert zu halten?

    Gigabyte GA-X58A-OC, Intel i7-980X, 12GB DDR3-RAM 2000Mhz, 2x Geforce GTX480, 1x Geforce 8800GTS, X-Fi Platinum, 3x OCZ-SSD 120GB (Raid0), watercooled


    "Die Welt ist klein, gemein und gnadenlos, und jeder stirbt einsam..."

    Einmal editiert, zuletzt von Mjolnir ()

  • Hallo,
    habe das Problem, dass ich eine neue Zeile zu einer Tabelle (housekeys) hinzufügen will. Damit die Zeilen nach Entstehungszeitpunkt sortiert bleiben, habe ich auch eine Sortiervariable (housecounter), die bei jedem Hinzufügen einer neuen Zeile für "houseid" eingesetzt und dann um 1 erhöht werden soll, für die nächste neue Zeile.
    Mein Code, den ich bis jetzt dazu hab, lautet:


    $sql = "INSERT INTO ".db_prefix("housekeys")." (ownerid, houseid, housecounter, housename, location) VALUES (".$session[user][acctid].", SELECT MAX(housecounter) FROM ".db_prefix("housekeys").", SELECT MAX(housecounter) FROM ".db_prefix("housekeys").", , ".get_module_pref("village").")";
    $sql = "UPDATE " .db_prefix("housekeys"). " SET housecounter = housecounter+1";
    db_query($sql);


    Das Problem: es kommt nichts in der Datenbank an. Gebe ich ihm über ein Formular die benötigten Daten (die werden weiter oben definiert), so werden diese nicht in die Tabelle eingetragen. Mit einer früheren Codeversion werden die Daten zwar eingetragen, sind aber weiterhin unsortiert, weil da noch nicht "housecounter" existiert. Der alte Code:


    $sql = "INSERT INTO ".db_prefix("housekeys")." (ownerid, houseid, housename, location) VALUES (".$session[user][acctid].", ".$session[user][acctid].", , ".get_module_pref("village").")";
    db_query($sql);


    Wo liegt nun mein Fehler, dass das nicht in der Datenbank erscheint/gibt es eine einfacherere Lösung, die Daten nach dem Eintragungszeitpunkt sortiert zu halten?

    Gigabyte GA-X58A-OC, Intel i7-980X, 12GB DDR3-RAM 2000Mhz, 2x Geforce GTX480, 1x Geforce 8800GTS, X-Fi Platinum, 3x OCZ-SSD 120GB (Raid0), watercooled


    "Die Welt ist klein, gemein und gnadenlos, und jeder stirbt einsam..."

    Einmal editiert, zuletzt von Mjolnir ()

    • Offizieller Beitrag

    Ach du scheisse welch ein kuddelmuddel :)


    Wo soll man da anfangen ....


    das ist ein chaos hoch 10 mit viel müll drin ;)


    eine sehr einfach lösung ist für dich die ausgabe dessen was du an die DB schicken willst. da wird dir sicher einiges klarer.


    schreib also über


    [php]db_query($sql);[/php]


    noch folgendes:


    [php]echo $sql;[/php]


    wenn du siehst wie dein string aussieht dann weisst du das die DB damit nichts anfnagen kann.


    was bei dir auch nicht schaden kann ist folgendes:


    unter


    [php]db_query($sql);[/php]


    machst du:


    [php]
    echo mysql_error();
    [/php]



    Ausserdem solltest du mit den orig. funktionen arbeiten ... sowas wie db_query ist doch scheisse ! Der Befehl von php mysql_query macht das ja und ist orig.


    Achja falls das da oben mit dem echo mysql_error nicht geht kannst du auch das versuchen:


    aus


    [php]db_query($sql);[/php]


    machst du:


    [php]db_query($sql) or die("Anfrage fehlgeschlagen: " . mysql_error());[/php]

    • Offizieller Beitrag

    Ach du scheisse welch ein kuddelmuddel :)


    Wo soll man da anfangen ....


    das ist ein chaos hoch 10 mit viel müll drin ;)


    eine sehr einfach lösung ist für dich die ausgabe dessen was du an die DB schicken willst. da wird dir sicher einiges klarer.


    schreib also über


    [php]db_query($sql);[/php]


    noch folgendes:


    [php]echo $sql;[/php]


    wenn du siehst wie dein string aussieht dann weisst du das die DB damit nichts anfnagen kann.


    was bei dir auch nicht schaden kann ist folgendes:


    unter


    [php]db_query($sql);[/php]


    machst du:


    [php]
    echo mysql_error();
    [/php]



    Ausserdem solltest du mit den orig. funktionen arbeiten ... sowas wie db_query ist doch scheisse ! Der Befehl von php mysql_query macht das ja und ist orig.


    Achja falls das da oben mit dem echo mysql_error nicht geht kannst du auch das versuchen:


    aus


    [php]db_query($sql);[/php]


    machst du:


    [php]db_query($sql) or die("Anfrage fehlgeschlagen: " . mysql_error());[/php]

  • Mhm. Irgendwas macht er, ich erhalte, wenn ich deine Befehle einsetz, als Debug-Ausgabe "UPDATE housekeys SET housecounter = housecounter+1".


    Schön, aber in der Tabelle taucht es dennoch nicht auf;
    was kann ich denn statt " ".$session[user][acctid].", " eintragen, dass er da stattdessen den größten Wert der Spalte "Housecounter" auswählt?

    Gigabyte GA-X58A-OC, Intel i7-980X, 12GB DDR3-RAM 2000Mhz, 2x Geforce GTX480, 1x Geforce 8800GTS, X-Fi Platinum, 3x OCZ-SSD 120GB (Raid0), watercooled


    "Die Welt ist klein, gemein und gnadenlos, und jeder stirbt einsam..."

  • Mhm. Irgendwas macht er, ich erhalte, wenn ich deine Befehle einsetz, als Debug-Ausgabe "UPDATE housekeys SET housecounter = housecounter+1".


    Schön, aber in der Tabelle taucht es dennoch nicht auf;
    was kann ich denn statt " ".$session[user][acctid].", " eintragen, dass er da stattdessen den größten Wert der Spalte "Housecounter" auswählt?

    Gigabyte GA-X58A-OC, Intel i7-980X, 12GB DDR3-RAM 2000Mhz, 2x Geforce GTX480, 1x Geforce 8800GTS, X-Fi Platinum, 3x OCZ-SSD 120GB (Raid0), watercooled


    "Die Welt ist klein, gemein und gnadenlos, und jeder stirbt einsam..."

    • Offizieller Beitrag

    und du bist sicher das das mit dem housecounter richtig ist ?!?


    :)


    du fragst echt extrem confuse sachen ... bist du sicher das du überhaupt nen Plan hast von SQL ? sonst fang doch bitte klein an und lerne erstmal wie man überhaupt was aussliest etc.

    • Offizieller Beitrag

    und du bist sicher das das mit dem housecounter richtig ist ?!?


    :)


    du fragst echt extrem confuse sachen ... bist du sicher das du überhaupt nen Plan hast von SQL ? sonst fang doch bitte klein an und lerne erstmal wie man überhaupt was aussliest etc.

  • Nein, bin ich nicht. *sfz*
    Du hast recht, ich hab noch nicht viel SQL drauf, das Problem ist nur: ich muss es trotzdem hinkriegen, weil derjenige, der das Teil ursprünglich einbauen sollte, verschollen gegangen ist und ich der einzige bin, der wenigstens halbwegs PHP kann und immerhin SQL-Code versteht, wenn er ihn liesst.


    housecounter war eine Sortiervariable, deren Spalte ich bei der Erstellung der Tabelle mit


    `housecounter` int( 11 ) unsigned NOT NULL default 0,


    eingebaut habe. Oder andere Lösung, die Tabelle zu sortieren? *hilflos guck*

    Gigabyte GA-X58A-OC, Intel i7-980X, 12GB DDR3-RAM 2000Mhz, 2x Geforce GTX480, 1x Geforce 8800GTS, X-Fi Platinum, 3x OCZ-SSD 120GB (Raid0), watercooled


    "Die Welt ist klein, gemein und gnadenlos, und jeder stirbt einsam..."

  • Nein, bin ich nicht. *sfz*
    Du hast recht, ich hab noch nicht viel SQL drauf, das Problem ist nur: ich muss es trotzdem hinkriegen, weil derjenige, der das Teil ursprünglich einbauen sollte, verschollen gegangen ist und ich der einzige bin, der wenigstens halbwegs PHP kann und immerhin SQL-Code versteht, wenn er ihn liesst.


    housecounter war eine Sortiervariable, deren Spalte ich bei der Erstellung der Tabelle mit


    `housecounter` int( 11 ) unsigned NOT NULL default 0,


    eingebaut habe. Oder andere Lösung, die Tabelle zu sortieren? *hilflos guck*

    Gigabyte GA-X58A-OC, Intel i7-980X, 12GB DDR3-RAM 2000Mhz, 2x Geforce GTX480, 1x Geforce 8800GTS, X-Fi Platinum, 3x OCZ-SSD 120GB (Raid0), watercooled


    "Die Welt ist klein, gemein und gnadenlos, und jeder stirbt einsam..."

    • Offizieller Beitrag

    du kannst die tabelle beim auslesen schon von mysql sortieren lassen :)


    mit der ORDER BY clausel.


    Ich meine ja du solltest dir mal die syntax anschauen.
    da steht eigentlich alles drin.


    http://dev.mysql.com/doc/refman/5.1/de/index.html
    ^^ das ist die ganze reference.


    http://dev.mysql.com/doc/refman/5.1/en/query-speed.html
    ^^ und das ist speziell eine SELECT optimierungs seite :)

    • Offizieller Beitrag

    du kannst die tabelle beim auslesen schon von mysql sortieren lassen :)


    mit der ORDER BY clausel.


    Ich meine ja du solltest dir mal die syntax anschauen.
    da steht eigentlich alles drin.


    http://dev.mysql.com/doc/refman/5.1/de/index.html
    ^^ das ist die ganze reference.


    http://dev.mysql.com/doc/refman/5.1/en/query-speed.html
    ^^ und das ist speziell eine SELECT optimierungs seite :)

  • Auf die Idee, ins Entwicklerhandbuch nach der Syntax zu gucken, hätt ich eigentlich auch selbst kommen können ~.~ - danke!


    Habe das ganze mit counter, blablabla nun rausgeschmissen und durch einen einfachen Zeitstempel in der Spalte `creationtime´ ersetzt:


    $sql = "INSERT INTO ".db_prefix("housekeys")." (ownerid, houseid, housename, location, creationtime) VALUES (".$session[user][acctid].", ".$session[user][acctid].", , ".get_module_pref("village").",CURRENT_TIMESTAMP)";


    Funktioniert auch ausgezeichnet, habe da nun das Datum drinstehen, nur jetzt die Frage zum Thema order by: irgendwie krieg ichs anhand der Syntax, die da angegeben ist, nicht hin, die Daten zu sortieren; mein Select-Befehl, den ich sortieren muss, lautet wohl


    $sql = "SELECT * FROM ".db_prefix("housekeys")." WHERE ownerid=".$session[user][acctid]." AND location=".$session[user][location]."";


    Wenn ich da nun aber ein "order by `creationtime` ASC" dranhänge, sortiert er trotzdem nicht - gibt es eine spezielle Order by-Syntax, um nach Datum zu sortieren? Dazu hab ich im Referencemanual nix gefunden, oder ich war zu doof zum Suchen...

    Gigabyte GA-X58A-OC, Intel i7-980X, 12GB DDR3-RAM 2000Mhz, 2x Geforce GTX480, 1x Geforce 8800GTS, X-Fi Platinum, 3x OCZ-SSD 120GB (Raid0), watercooled


    "Die Welt ist klein, gemein und gnadenlos, und jeder stirbt einsam..."

  • Auf die Idee, ins Entwicklerhandbuch nach der Syntax zu gucken, hätt ich eigentlich auch selbst kommen können ~.~ - danke!


    Habe das ganze mit counter, blablabla nun rausgeschmissen und durch einen einfachen Zeitstempel in der Spalte `creationtime´ ersetzt:


    $sql = "INSERT INTO ".db_prefix("housekeys")." (ownerid, houseid, housename, location, creationtime) VALUES (".$session[user][acctid].", ".$session[user][acctid].", , ".get_module_pref("village").",CURRENT_TIMESTAMP)";


    Funktioniert auch ausgezeichnet, habe da nun das Datum drinstehen, nur jetzt die Frage zum Thema order by: irgendwie krieg ichs anhand der Syntax, die da angegeben ist, nicht hin, die Daten zu sortieren; mein Select-Befehl, den ich sortieren muss, lautet wohl


    $sql = "SELECT * FROM ".db_prefix("housekeys")." WHERE ownerid=".$session[user][acctid]." AND location=".$session[user][location]."";


    Wenn ich da nun aber ein "order by `creationtime` ASC" dranhänge, sortiert er trotzdem nicht - gibt es eine spezielle Order by-Syntax, um nach Datum zu sortieren? Dazu hab ich im Referencemanual nix gefunden, oder ich war zu doof zum Suchen...

    Gigabyte GA-X58A-OC, Intel i7-980X, 12GB DDR3-RAM 2000Mhz, 2x Geforce GTX480, 1x Geforce 8800GTS, X-Fi Platinum, 3x OCZ-SSD 120GB (Raid0), watercooled


    "Die Welt ist klein, gemein und gnadenlos, und jeder stirbt einsam..."

  • Naja, das doofe ist: wenn ich userid oder houseid als Primekey setze,sortiert er die Tabelle bei der Ausgabe nicht nach dem Zeitpunkt der Erstellung, sondern nach dem Zeitpunkt der Registrierung der User, da die Userid bei der Registrierung gesetzt wird...

    Gigabyte GA-X58A-OC, Intel i7-980X, 12GB DDR3-RAM 2000Mhz, 2x Geforce GTX480, 1x Geforce 8800GTS, X-Fi Platinum, 3x OCZ-SSD 120GB (Raid0), watercooled


    "Die Welt ist klein, gemein und gnadenlos, und jeder stirbt einsam..."

  • Naja, das doofe ist: wenn ich userid oder houseid als Primekey setze,sortiert er die Tabelle bei der Ausgabe nicht nach dem Zeitpunkt der Erstellung, sondern nach dem Zeitpunkt der Registrierung der User, da die Userid bei der Registrierung gesetzt wird...

    Gigabyte GA-X58A-OC, Intel i7-980X, 12GB DDR3-RAM 2000Mhz, 2x Geforce GTX480, 1x Geforce 8800GTS, X-Fi Platinum, 3x OCZ-SSD 120GB (Raid0), watercooled


    "Die Welt ist klein, gemein und gnadenlos, und jeder stirbt einsam..."