Het probleem is dat MySQL geen goede manier heeft om rijen op te sommen. Het gebruik van de constante is helaas niet gegarandeerd, volgens de MySQL-documentatie. Het werkt vaak wel, maar het kan ook problematisch zijn.
Ik stel voor dat u de namen samenvoegt in één enkel veld. Het resultaat zou er als volgt uitzien:
1 tree,rose
2 tree
3 tree,bush,rose
De SQL gebruiken:
select plantid, group_concat(name separator ',')
from t
group by plantid
Als je de namen echt in aparte kolommen wilt hebben, denk je aan twee opties. Een daarvan is om de resultaten van boven te gebruiken en het resultaat vervolgens in afzonderlijke tekenreeksen te ontleden. Het andere alternatief is om een self-join en aggregatie te gebruiken om een volgnummer te berekenen, zoals dit:
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
En gebruik dit als de subquery.