phpMyAdmin
 sql >> Database >  >> Database Tools >> phpMyAdmin

MySQL - La query combina le righe con lo stesso ID e conserva tutte le voci per quell'ID ma come un unico record

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.