Il problema è che MySQL non ha un buon modo per enumerare le righe. L'uso della costante non è garantito per funzionare, purtroppo, secondo la documentazione di MySQL. Spesso funziona, ma può anche essere problematico.
Suggerirei di concatenare i nomi insieme in un unico campo. Il risultato sarebbe simile a:
1 tree,rose
2 tree
3 tree,bush,rose
Utilizzando l'SQL:
select plantid, group_concat(name separator ',')
from t
group by plantid
Se volevi davvero i nomi in colonne separate, ti vengono in mente due opzioni. Uno consiste nell'usare i risultati dall'alto e quindi analizzare il risultato in stringhe separate. L'altra alternativa consiste nell'usare un self-join e un'aggregazione per calcolare un numero sequenziale, in questo modo:
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
E usa questo come sottoquery.