phpMyAdmin
 sql >> Datenbank >  >> Database Tools >> phpMyAdmin

MySQL - Abfrage kombiniert Zeilen mit derselben ID und behält alle Einträge für diese ID, aber als einen Datensatz

Das Problem ist, dass MySQL keine gute Möglichkeit hat, Zeilen aufzuzählen. Die Verwendung der Konstante ist laut MySQL-Dokumentation leider nicht garantiert. Es funktioniert oft, kann aber auch problematisch sein.

Ich würde vorschlagen, dass Sie die Namen in einem einzigen Feld verketten. Das Ergebnis würde wie folgt aussehen:

1     tree,rose
2     tree
3     tree,bush,rose

Verwenden von SQL:

select plantid, group_concat(name separator ',')
from t
group by plantid

Wenn Sie die Namen wirklich in separaten Spalten haben möchten, kommen Ihnen zwei Optionen in den Sinn. Eine besteht darin, die Ergebnisse von oben zu verwenden und das Ergebnis dann in separate Zeichenfolgen zu zerlegen. Die andere Alternative besteht darin, einen Self-Join und eine Aggregation zu verwenden, um eine fortlaufende Nummer zu berechnen, wie hier:

select p.plantid, p.name, count(*) as seqnum
from t p left outer join
     t pprev
     on p.plantid = pprev.plantid and
        p.name >= pprev.name
group by p.plantid, p.name

Und verwenden Sie dies als Unterabfrage.