phpMyAdmin
 sql >> Base de données >  >> Database Tools >> phpMyAdmin

MySQL - La requête combine les lignes avec le même identifiant et conserve toutes les entrées pour cet identifiant mais comme un seul enregistrement

Le problème est que MySQL n'a pas un bon moyen d'énumérer les lignes. L'utilisation de la constante n'est pas garantie de fonctionner, hélas, selon la documentation MySQL. Cela fonctionne souvent, mais cela peut aussi être problématique.

Je vous suggère de concaténer les noms dans un seul champ. Le résultat ressemblerait à :

1     tree,rose
2     tree
3     tree,bush,rose

Utilisation du SQL :

select plantid, group_concat(name separator ',')
from t
group by plantid

Si vous vouliez vraiment que les noms soient dans des colonnes séparées, deux options vous viennent à l'esprit. La première consiste à utiliser les résultats ci-dessus, puis à analyser le résultat dans des chaînes distinctes. L'autre alternative consiste à utiliser une auto-jointure et une agrégation pour calculer un nombre séquentiel, comme ceci :

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

Et utilisez ceci comme sous-requête.