Problém je v tom, že MySQL nemá dobrý způsob výčtu řádků. Bohužel podle dokumentace MySQL není zaručeno, že použití konstanty bude fungovat. Často to funguje, ale může to být také problematické.
Navrhoval bych, abyste jména spojili do jednoho pole. Výsledek by vypadal takto:
1 tree,rose
2 tree
3 tree,bush,rose
Pomocí SQL:
select plantid, group_concat(name separator ',')
from t
group by plantid
Pokud byste opravdu chtěli jména v samostatných sloupcích, napadají vás dvě možnosti. Jedním z nich je použít výsledky shora a poté výsledek analyzovat do samostatných řetězců. Druhou alternativou je použití vlastního spojení a agregace k výpočtu pořadového čísla, jako je tento:
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
A použijte to jako dílčí dotaz.