ManicMarble
Erfahrenes Mitglied
Hallo,
ich bin ganz neu hier und möchte mal fragen, ob jemand eine bessere Lösung für folgendes Problem weiß:
Ich möchte in MySQL ein Feld über eine Reihe von Datensätzen neu von 1 bis x durchnummerieren. Es handelt sich um ein Sortierfeld, mit dessen Hilfe der Anwender die Position eines DS in einer Anzeigeliste selbst bestimmen kann.
Meine Lösung sieht momentan so aus:
Ich setze voraus, dass das Feld sortorder über alle betroffenen DS nur ganze Zahlen in aufsteigender Reihenfolge enthält. Der User bestimmt nun beispielsweise, dass er Zeile 10 hinter Zeile 5 verschieben möchte. Das Programm schreibt bei Satz 10 den Wert 5.5 in sortorder. Damit nun wieder in allen Sätzen ganze Zahlen stehen, werden per Script alle Sätze selektiert (sortiert nach sortorder) und in einer Schleife wird ein inkrementierender Wert beginnend bei 1 in sortorder geschrieben. In PHP sieht das in etwa so aus:
Frage:
Gibt es für diese Neu-Nummerierung auch eine schnelle, reine SQL-Lösung? Habe bereits mit Variablen experimentiert, was ich mir etwa so vorgestellt habe:
SET @i=0;
UPDATE table SET sortorder = (@i := @i + 1) ORDER BY sortorder
Aber das hat nicht funktioniert. Kann es sein, dass meine MySQL-Version (MySQL-Max 3.23...) das ORDER BY für UPDATE noch nicht unterstützt (die MySQL-Doku http://www.mysql.com/doc/de/UPDATE.html sagt nichts dergleichen). Ohne ORDER BY funktioniert's theoretisch, allerdings werden die Sätze dann in der Reihenfolge ihres Einfügens durchnummeriert.
Wäre über jegliche Anregung höchst erfreut - vielleicht habe ich mich auch völlig verrannt und es gibt eine ganz simple Lösung...
Viele Grüße aus dem Allgäu
ich bin ganz neu hier und möchte mal fragen, ob jemand eine bessere Lösung für folgendes Problem weiß:
Ich möchte in MySQL ein Feld über eine Reihe von Datensätzen neu von 1 bis x durchnummerieren. Es handelt sich um ein Sortierfeld, mit dessen Hilfe der Anwender die Position eines DS in einer Anzeigeliste selbst bestimmen kann.
Meine Lösung sieht momentan so aus:
Ich setze voraus, dass das Feld sortorder über alle betroffenen DS nur ganze Zahlen in aufsteigender Reihenfolge enthält. Der User bestimmt nun beispielsweise, dass er Zeile 10 hinter Zeile 5 verschieben möchte. Das Programm schreibt bei Satz 10 den Wert 5.5 in sortorder. Damit nun wieder in allen Sätzen ganze Zahlen stehen, werden per Script alle Sätze selektiert (sortiert nach sortorder) und in einer Schleife wird ein inkrementierender Wert beginnend bei 1 in sortorder geschrieben. In PHP sieht das in etwa so aus:
PHP:
$sql = "SELECT id,sortorder FROM table WHERE (userid = 'x') ORDER BY sortorder";
$rst = mysql_query($sql, $con)
$i = 1;
while ($row = mysql_fetch_assoc($rst)) {
mysql_query("UPDATE table SET sortorder = '".$i."' WHERE id = '".$row["id"]."' LIMIT 1", $con)
$i++;
}
mysql_free_result($rst);
Frage:
Gibt es für diese Neu-Nummerierung auch eine schnelle, reine SQL-Lösung? Habe bereits mit Variablen experimentiert, was ich mir etwa so vorgestellt habe:
SET @i=0;
UPDATE table SET sortorder = (@i := @i + 1) ORDER BY sortorder
Aber das hat nicht funktioniert. Kann es sein, dass meine MySQL-Version (MySQL-Max 3.23...) das ORDER BY für UPDATE noch nicht unterstützt (die MySQL-Doku http://www.mysql.com/doc/de/UPDATE.html sagt nichts dergleichen). Ohne ORDER BY funktioniert's theoretisch, allerdings werden die Sätze dann in der Reihenfolge ihres Einfügens durchnummeriert.
Wäre über jegliche Anregung höchst erfreut - vielleicht habe ich mich auch völlig verrannt und es gibt eine ganz simple Lösung...
Viele Grüße aus dem Allgäu