El problema es que MySQL no tiene una buena forma de enumerar filas. No se garantiza que el uso de la constante funcione, por desgracia, de acuerdo con la documentación de MySQL. A menudo funciona, pero también puede ser problemático.
Le sugiero que concatene los nombres en un solo campo. El resultado se vería así:
1 tree,rose
2 tree
3 tree,bush,rose
Usando el SQL:
select plantid, group_concat(name separator ',')
from t
group by plantid
Si realmente quería los nombres en columnas separadas, se le ocurren dos opciones. Una es usar los resultados de arriba y luego analizar el resultado en cadenas separadas. La otra alternativa es usar una autounión y una agregación para calcular un número secuencial, como este:
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
Y use esto como la subconsulta.