phpMyAdmin
 sql >> Base de Dados >  >> Database Tools >> phpMyAdmin

MySQL - Query combina linhas com o mesmo id e mantém todas as entradas para esse id, mas como um registro


O problema é que o MySQL não tem uma boa maneira de enumerar linhas. O uso da constante não é garantido para funcionar, infelizmente, de acordo com a documentação do MySQL. Muitas vezes funciona, mas também pode ser problemático.

Eu sugiro que você concatene os nomes juntos em um único campo. O resultado ficaria assim:
1     tree,rose
2     tree
3     tree,bush,rose

Usando o SQL:
select plantid, group_concat(name separator ',')
from t
group by plantid

Se você realmente queria os nomes em colunas separadas, duas opções vêm à mente. Uma é usar os resultados acima e depois analisar o resultado em strings separadas. A outra alternativa é usar uma auto-junção e agregação para calcular um número sequencial, 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

E use isso como a subconsulta.