MySQL - Query combiner les lignes avec le même id et de garder tous les accès pour que les id, mais comme un seul enregistrement
Je travaille sur une table dans une base de données mysql être tenue localement sur un serveur wamp, je suis en utilisant le phpmyadmin de la zone dans wamp pour exécuter les requêtes sur. Je suis en train d'essayer d'obtenir les données pour effectuer les opérations suivantes:
Peut aider quelqu'un j'ai une table avec un nombre d'enregistrements pour les plantes. Une plante peut avoir un certain nombre de noms de la table montre ce que les différents enregistrements. La table est appelé new_plantsname
plantid name
1 tree
1 rose
2 bush
3 tree
3 bush
3 rose
cela continue de plus de 3000 dossiers
ce que je veux c'est de combiner les enregistrements avec le même plantid et de montrer les différents noms dans différentes colonnes:
plantid name1 name2 name3 ...
1 tree rose NULL
2 shrub NULL NULL
3 tree rose bush
etc
D'un coup d'œil, je crois, une plante n'a pas plus de 4 noms.
Peut-on m'aider à la requête pour ce faire. Je tiens également à enregistrer les résultats dans une nouvelle table
Quelqu'un m'a donné les informations suivantes pour la réponse:
select plantid,
max(case when nameRn = 'name1' then name end) Name1,
max(case when nameRn = 'name2' then name end) Name2,
max(case when nameRn = 'name3' then name end) Name3,
max(case when nameRn = 'name4' then name end) Name4
from
(
select plantid, name,
concat('name', @num := if(@plantid = `plantid`, @num + 1, 1)) as nameRn,
@plantid := `plantid` as dummy
from
(
select plantid, name, @rn:=@rn+1 overall_row_num
from yourtable, (SELECT @rn:=0) r
) x
order by plantid, overall_row_num
) src
group by plantid;
Cet air de fonctionner, bien que pas d'erreurs mais cela n'a pas combiner les enregistrements qu'elle n'a gardé que le nom du premier enregistrement avec l'id n'est pas le reste.
DONNÉES UTILISÉES:
plantid name
1 tree
1 rose
2 tree
3 rose
3 bush
3 rose
RÉSULTATS:
Peut aider quelqu'
Id suggèrent alors vous navez pas eu la même structure de données que vous dites ici. En conséquence, je pense que c'est à vous de travailler sur la prochaine étape. L'exemple donné précédemment fonctionne bien dans la démo ci-dessus. À défaut, peut-être que phpmyadmin n'est pas en mesure de traiter la requête correctement. Avez-vous essayé d'exécuter la requête dans un autre outil d'admin???
OriginalL'auteur zaratjlc | 2012-11-16
Vous devez vous connecter pour publier un commentaire.
Le problème est que MySQL n'a pas une bonne façon d'énumérer les lignes. L'utilisation de la constante n'est pas garanti, hélas, d'après la documentation de MySQL. Souvent, il fonctionne, mais il peut aussi être problématique.
Je voudrais vous suggérer de concaténer les noms ensemble dans un seul champ. Le résultat devrait ressembler à:
À l'aide de SQL:
Si tu voulais vraiment les noms des colonnes séparées, deux options viennent à l'esprit. L'une est d'utiliser les résultats à partir de ci-dessus et ensuite d'analyser le résultat en chaînes de caractères séparées. L'autre alternative est d'utiliser une auto-jointure et d'agrégation pour calculer un numéro séquentiel, comme ceci:
Et ce que la sous-requête.
OriginalL'auteur Gordon Linoff