MySQL group_concat avec la clause where
J'ai eu ce problème avec Group_Concat et où le filtre. Dans ma table j'ai eu les noms des modules qui sont liés à un client. Je recherche des clients par le nom du module, mais dans le groupe concat je veux voir tous les modules qui sont détenus par le client. actuellement, il affichera tous les clients avec ces modules, mais il n'afficher que le module spécifique. Je ne peux pas comprendre comment les rendre à la fois de travailler ensemble.
Des suggestions sur la façon d'obtenir mon résultat attendu??
Ces quelques tableaux de base et de la requête, j'ai essayé avec des résultats que j'obtiens et le résultat que je voulais vraiment
Client
+--------------------+
| id | name |
+--------------------+
| 1 | client1 |
| 2 | client2 |
| 3 | client3 |
| 4 | client4 |
+--------------------+
Module
+--------------------+
| id | name |
+--------------------+
| 1 | module1 |
| 2 | module2 |
| 3 | module3 |
| 4 | module4 |
+--------------------+
Client_Module
+-------------------------+
| client_id | module_id |
+-------------------------+
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 2 | 2 |
| 2 | 4 |
| 3 | 4 |
| 4 | 1 |
| 4 | 2 |
| 4 | 3 |
| 4 | 4 |
+-------------------------+
Requête:
SELECT client.id, client.name, GROUP_CONCAT(module.name) AS modules
FROM client
LEFT JOIN client_module ON client_module.client_id = client.id
LEFT JOIN module ON module.id = client_module.module.id
WHERE module.id IN (1,2)
Résultats:
Received
+--------------------------------------------------+
| id | name | modules |
+--------------------------------------------------+
| 1 | client1 | module2 |
| 2 | client2 | module1,module2 |
| 4 | client4 | module1,module2 |
+--------------------------------------------------+
Expected
+------------------------------------------------------+
| id | name | modules |
+------------------------------------------------------+
| 1 | client1 | module2,module3 |
| 2 | client2 | module1,module2,module4 |
| 4 | client4 | module1,module2,module3,module4 |
+------------------------------------------------------+
WHERE client_module.module_id IN (1,2)
dans votre requête ,quel est le problème ici?mon mauvais, qui n'était pas dans la requête d'origine dépouillé la mauvaise partie de la. Corrigé
Il y a le problème a été résolu?
Pas de problème demeure. C'était une maquette de la faille
Vous utilisez
client_module.module_id IN (1,2)
donc ça va évidemment choisir seulement module1, module2..Supprimer la clause where pour obtenir le résultat attenduOriginalL'auteur telefoontoestel | 2014-03-10
Vous devez vous connecter pour publier un commentaire.
Vous pouvez Essayer Comme ça.
SQL Violon Démo
content que cela a fonctionné pour vous
OriginalL'auteur Amit Singh
Vous utilisez
client_module.module_id
changer declient_module.client_id
.Utilisation
group by
avecgroup_cancat
violon
OriginalL'auteur G one
essayer
Vous avez ce mauvais
client_module.module.id
fixe àclient_module.module_id
ET vous êtes déjà en train de dire à votre clause where pour le retour seulement 1 et 2 .
Groupe ajouté par le travail lorsque vous avez Group_Concat
DÉMO
OriginalL'auteur echo_Me