user-defined variables & fortlaufender Index
mysqler
- datenbank
Hallo,
ich habe eine Tabelle, die wie folgt aussieht:
id parent_id name
----------------------------
1 2 X1
2 2 X2
3 5 X3
4 5 X4
5 10 Y3
ich möchte nun einen fortlaufenden Index, sobald sich parent_id ändert. Die Reihenfolge wird dynamisch geändert, deshalb kam ich auf die Idee der user-defined Variables.
Die gewünschte Ausgabe sieht in etwa so aus:
id fortlaufender_index name
------------------------------------
1 1 X1
2 1 X2
3 2 X3
4 2 X4
5 3 Y3
der SQL-query müsste in etwa wie folgt aussehen, allerdings funktioniert er noch nicht:
SELECT
id,
IF(@last_parent_id<>parent_id, (@fortlaufender_index=@fortlaufender_index+1, @last_parent_id=parent_id) fortlaufender_index,
name
FROM
...
hat jemand einen Tipp, wie ich das schreiben muss? Oder eine Idee neben user-defined Variables?
Grüsse, mysqler
Tach!
der SQL-query müsste in etwa wie folgt aussehen, allerdings funktioniert er noch nicht:
"Funktioniert nicht" funktioniert nicht als Fehlerbeschreibung, oder nur sehr schlecht. Bitte beobachte und beschreibe genauer was passieren soll und was stattdessen passiert.
SELECT
id,
IF(@last_parent_id<>parent_id, (@fortlaufender_index=@fortlaufender_index+1, @last_parent_id=parent_id) fortlaufender_index,
name
FROM
...hat jemand einen Tipp, wie ich das schreiben muss? Oder eine Idee neben user-defined Variables?
Sind die Variablen initialisiert worden? Dir ist der Unterschied zwischen einem Vergleich und einer Zuweisung bekannt? Siehe MySQL-Handbuch, Kapitel Language Structure -> User-Defined Variables. Ich sehe auch nicht ausreichend Gegenstücke zu geöffneten Klammern.
dedlfix.
Hallo,
danke für die Antwort dedlfix.
Lösung ist wie folgt:
SET @last_parent_id=0;
SET @fortlaufender_index=0;
SELECT
id,
name,
IF(@last_parent_id<>parent_id, @fortlaufender_index:=@fortlaufender_index+1, @fortlaufender_index) tmp_index,
@fortlaufender_index fortlaufender_index,
@last_parent_id:=parent_id tmp_id_setter
...
sicher keine "schöne" Lösung, aber sie funktioniert. Falls jemand eine schönere Lösung hat, interessiert mich.
Grüsse,
mysqler
Tach!
sicher keine "schöne" Lösung, aber sie funktioniert. Falls jemand eine schönere Lösung hat, interessiert mich.
Naja, du brauchst einen so genannten Gruppenwechsel. Den kannst man prinzipiell auch in der abfragenden Umgebung aufsetzen. Aber innerhalb (My)SQLs fällt mir auch keine bessere Lösung ein. Du kannst es höchstens noch in einer Stored Procedure "verstecken".
Brauchst du die extra Abfrage @fortlaufender_index fortlaufender_index oder liefert nicht bereits das tmp_index-Konstrukt dieselbe Information?
dedlfix.