Phillip: PHP - MySQL ID ändern

Hallo!

Ich möchte die Reihenfolge der Datenausgabe ändern, indem ich einfach die Ids ändere und dann danach sortieren lass.
Dazu hab ich folgendes gebastelt:.

if ($action == "up")
    {
     $references_id = $_GET['references_id'];

mysql_query("UPDATE ".$table_prefix."references SET references_id='1000000' WHERE references_id='$references_id'");
     mysql_query("UPDATE ".$table_prefix."references SET references_id='$references_id' WHERE references_id='". $references_id-1 ."'") or die (mysql_error());
     mysql_query("UPDATE ".$table_prefix."references SET references_id='". $references_id+1 ."' WHERE references_id='1000000'");
     header("Location: index.php?section=references&action=edit_delete");
    }

Doch irgendwie will das nich funktionieren...beim 3. Schritt ensteht anscheinend ein Fehler, denn von 1000000 wird nicht auf $references_id+1 geändert...hat vielleicht jemand eine Idee??
Wäre echt klasse!
Schonmal Danke im vorraus,

Phillip

  1. Hallo Phillip!

    mysql_query("UPDATE ".$table_prefix."references SET references_id='1000000' WHERE references_id='$references_id'");
         mysql_query("UPDATE ".$table_prefix."references SET references_id='$references_id' WHERE references_id='". $references_id-1 ."'") or die (mysql_error());
         mysql_query("UPDATE ".$table_prefix."references SET references_id='". $references_id+1 ."' WHERE references_id='1000000'");

    Doch irgendwie will das nich funktionieren...beim 3. Schritt ensteht anscheinend ein Fehler, denn von 1000000 wird nicht auf $references_id+1 geändert...hat vielleicht jemand eine Idee??

    Laß Dir mal beim dritten Schritt auch MySQL-Fehler ausgeben.
    Vielleicht sagt Dir MySQL ja, was da nicht geht.

    MfG
    Götz

    --
    Losung für Donnerstag, 30. Dezember 2004
    Gott wird alle Werke vor Gericht bringen, alles, was verborgen ist, es sei gut oder böse. (Prediger 12,14)
    Darin ist erschienen die Liebe Gottes unter uns, dass Gott seinen eingebornen Sohn gesandt hat in die Welt, damit wir durch ihn leben sollen. (1. Johannes 4,9)
    (Losungslink)
    1. Hallo Phillip!

      mysql_query("UPDATE ".$table_prefix."references SET references_id='1000000' WHERE references_id='$references_id'");
           mysql_query("UPDATE ".$table_prefix."references SET references_id='$references_id' WHERE references_id='". $references_id-1 ."'") or die (mysql_error());
           mysql_query("UPDATE ".$table_prefix."references SET references_id='". $references_id+1 ."' WHERE references_id='1000000'");

      Doch irgendwie will das nich funktionieren...beim 3. Schritt ensteht anscheinend ein Fehler, denn von 1000000 wird nicht auf $references_id+1 geändert...hat vielleicht jemand eine Idee??

      Laß Dir mal beim dritten Schritt auch MySQL-Fehler ausgeben.
      Vielleicht sagt Dir MySQL ja, was da nicht geht.

      Leider bekomme ich da diesen Fehler...sagt mir auch nicht viel :(

      You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '-1'' at line 1

      Phillip

      1. Hallo Phillip!

        You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '-1'' at line 1

        Eigentlich sollte die Datenbank doch gar kein "-1" bekommen, sondern nur die errechnete Zahl, oder?
        Speicher die Queries mal in Variablen, und laß sie Dir zusätzlich ausgeben.
        Vielleicht fällt Dir dann auf, was falsch ist.

        MfG
        Götz

        --
        Losung für Donnerstag, 30. Dezember 2004
        Gott wird alle Werke vor Gericht bringen, alles, was verborgen ist, es sei gut oder böse. (Prediger 12,14)
        Darin ist erschienen die Liebe Gottes unter uns, dass Gott seinen eingebornen Sohn gesandt hat in die Welt, damit wir durch ihn leben sollen. (1. Johannes 4,9)
        (Losungslink)
  2. Hello,

    Ich möchte die Reihenfolge der Datenausgabe ändern, indem ich einfach die Ids ändere und dann danach sortieren lass.

    Auf den ersten Blick mag Deine Idee ganz praktisch sein.

    Grundsätzlich solltest Du Dir über verschiedene Dinge klar sein:
    Unter ID eines Datensatzes verstehen bestimmt über 90% der Datanbank-Anwendungsentwickler den Primary Key des Datsnsatzes. Wenn der auch noch automatisch vergeben wird (autoincrement, stored procedure) dann sollte man ihn nicht mehr willkürlich ändern.

    Aus diesem Grunde solltest Du also der Anzeige-Sortierung einen anderen Namen geben, z.B. 'lfd_nr' oder 'sort_key' oder was auch immer.

    Um Datensätze nun in der Anzeigereihenfolge zu verändern, kann man diese numeriesche Anzeige-Sortierung zweier aufeinanderfolgender Sätze nun gegeneinander togglen. Das geht in EINEM SQL-statement mit einem Rechentrick. Damit ist es eine atomare Operation und es kann nichts schief gehen.

    Wenn man die numerischen Anzeige-Sortierungen zweier weiter auseinander liegender Datensätze miteinander tauschen will, geht das über denselben Rechentrick.

    Wenn es sich aber um alpfanumerische Anzeige-Sortierungen handelt, oder man erst über die ID der Sätze die Anzeige-Sortierungen ermitteln muss, wird es kompliziert.

    Mittels Subselects oder SelfJoins (die nicht jedes DBMS unterstützt) geht das auch innerhal eines Query. Anderenfalls muss man durch geéinetes Locks (Datensaätz-Locks, Tabellen-Locks) die Queries binden.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau