Problemet är att MySQL inte har ett bra sätt att räkna upp rader. Användningen av konstanten är inte garanterad att fungera, tyvärr, enligt MySQL-dokumentationen. Det fungerar ofta, men det kan också vara problematiskt.
Jag skulle föreslå att du sammanfogar namnen till ett enda fält. Resultatet skulle se ut så här:
1 tree,rose
2 tree
3 tree,bush,rose
Använda SQL:
select plantid, group_concat(name separator ',')
from t
group by plantid
Om du verkligen ville ha namnen i separata kolumner, kommer två alternativ att tänka på. En är att använda resultaten från ovan och sedan analysera resultatet i separata strängar. Det andra alternativet är att använda en självkoppling och aggregering för att beräkna ett sekventiellt tal, så här:
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
Och använd detta som underfrågan.