Bonsoir,
je cherche depuis un moment à réaliser une requête assez complexe dont voici en gros la tête :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 SELECT c.* , GROUP_CONCAT(DISTINCT u.login SEPARATOR ",") AS read_by, GROUP_CONCAT(DISTINCT u.email SEPARATOR ",") AS em_read_by, GROUP_CONCAT(DISTINCT u2.login SEPARATOR ",") AS reply_by, GROUP_CONCAT(DISTINCT u2.email SEPARATOR ",") AS em_reply_by FROM contact c, user u, user u2 WHERE c.id_contact=1 AND c.read_by IN (SELECT id_user FROM user) AND c.answered_by IN (SELECT id_user FROM user) GROUP BY c.id_contact
Bon, évidement la requête est vraiment moche et mal foutu, mais peut-être y voyez vous plus clair dans mes intentions.
Si ce n'est pas le cas, en fait je cherche à retourner en une requête un seul enregistrement regroupement des données de deux tables différentes.
Quelques infos sur les champs:
Le champ 'c.read_by' et 'c.answered_by' sont de type CHAR et contiennent une entrée de la forme : '1,3,5,' (les chiffres correspondant aux ID des membres de la table user)
Ce qui m'est retourné lors de la requête (un seul retour/résultat j'ai bien dit) (j'ai enlevé ce qui importait peu):
_______________________________________________________________________________________
|c.id_contact | read_by.................| em_read_by.........| reply_by.................| em_reply_by |
------------------------------------------------------------------------------------------------------------------------
|1............. | Pseudo1,Pseudo2, etc..| email@email.fr, etc..| Pseudo1,Pseudo2, etc..| email@email.fr, etc..
Donc en gros ma requête transforme les ID du champ c.read_by par les pseudos correspondant.
Cependant, et c'est là mon problème, je me retrouve avec le champ resultat 'read_by' contenant TOUT les ID de ma table user transformés en pseudo, alors que je ne veux récupérer que les pseudos des ID contenu dans le champ c.read_by.
C'est un module de contact que je réalise et je veux faire en sorte que les membres puisse marquer comme lu les messages envoyés par les visiteurs, pour ainsi afficher dans mon administration qui a lu le message.
A mon avis je me complique bien la vie, en 2 requêtes c'est torché mais je suis pourtant persuadé qu'en une seule y a moyen d'arriver à ce que je veux.
Bref si quelqu'un a une idée :s . Le problème vient du IN à mon avis, qui n'est pas judicieux ou mal utilisé peut-être.
Si on pouvais comparer dans une requête deux array ce serait génial mais je n'ai pas trouvé comment et je ne crois pas que mysql sache le faire..
Si il vous manque des infos ou que ce n'est pas très clair dites le j'essairai de refaire ça mieux..
Merci d'avance.
Partager