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.