Problemet er, at MySQL ikke har en god måde at opregne rækker på. Brugen af konstanten er ikke garanteret at virke, desværre, ifølge MySQL-dokumentationen. Det virker ofte, men det kan også være problematisk.
Jeg vil foreslå, at du sammenkæder navnene i et enkelt felt. Resultatet ville se sådan ud:
1 tree,rose
2 tree
3 tree,bush,rose
Brug af SQL:
select plantid, group_concat(name separator ',')
from t
group by plantid
Hvis du virkelig ville have navnene i separate kolonner, kommer der to muligheder i tankerne. Den ene er at bruge resultaterne fra oven og derefter parse resultatet i separate strenge. Det andet alternativ er at bruge en selvsammenføjning og aggregering til at beregne et sekventielt tal, som dette:
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
Og brug dette som underforespørgsel.