3
votes

Utilisation de GROUP_CONCAT avec FIND_IN_SET dans la clause mysql WHERE

J'ai cette requête et je souhaite obtenir les données de rendez-vous de la table à l'aide de l'adresse e-mail de l'élève, mais cette erreur s'affiche. p>


0 commentaires

3 Réponses :


3
votes

Vous pouvez essayer d'utiliser la sous-requête

select * from
(
select a.*, GROUP_CONCAT(e.value) as stu FROM wp_ea_appointments a join
wp_ea_fields e on a.id = e.app_id WHERE a.date > DATE('2019-02-14') 
GROUP BY a.id
)A where FIND_IN_SET('jan@gmail.com' , stu ) 


0 commentaires

4
votes

La condition

FIND_IN_SET doit être contenue dans l'instruction HAVING au lieu de l'instruction WHERE car vous souhaitez filtrer les données après le regroupement

SELECT a.*, 
    GROUP_CONCAT(e.value) as stu 
FROM wp_ea_appointments a 
JOIN wp_ea_fields e ON a.id = e.app_id 
WHERE a.date > DATE('2019-02-14')
GROUP BY a.id
HAVING FIND_IN_SET('jan@gmail.com', stu) 


0 commentaires

1
votes

Utilisez une clause HAVING , mais énoncez correctement la logique:

SELECT a.*, GROUP_CONCAT(e.value) as stu
FROM wp_ea_appointments a JOIN
     wp_ea_fields e 
     ON a.id = e.app_id
WHERE a.date > DATE('2019-02-14')
HAVING SUM( e.value = 'jan@gmail.com' ) > 0;

Il n'y a aucune raison d'utiliser la concaténation de chaînes pour vérifier si la valeur existe. Les comparaisons de chaînes sont plus chères et moins claires.


0 commentaires