|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : mars 2008 Messages : 9 ![]() |
Bonjour,
J'ai un problème qui me semble très simple mais après avoir peiné dessus une partie de la journée, je ne trouve pas .... J'ai une table Article liée via une table de jointure ArticleTag à une table Tag. Article (id, titre, contenu, ...) (1, Le vol des mouettes, blablabla) (2, La chouette huppée, bliblibli) ArticleTag (article_id, tag_id) (1, 1) (1, 2) (2, 1) (2, 3) Tag (id, nom) (1, Oiseaux) (2, Documentaire) (3, Glace à la vanille) L'idée de la requête est de pouvoir filtrer les articles par autant de tags que nécessaire. Exemples : En filtrant avec "Oiseaux" et "Documentaire" je ne devrais récupérer que l'article 1. En filtrant uniquement avec "Oiseaux" je récupère les deux articles. Bref je ne comprend pas, ça me semble relativement simple mais je ne vois pas. En espérant que quelqu'un saura me sortir de là, en tout cas merci à ceux qui essaieront. |
|
|
00
|
|
|
#3 | ||||
|
Invité de passage
![]() Inscription : mars 2008 Messages : 9 ![]() |
Bonjour,
Merci pour ta réponse, j'ai donc essayé avec le mot clé "EXISTS" Code :
Ai-je fait quelque chose de travers ? En y réfléchissant à tête reposé, j'ai trouvé une solution, mais elle me parait un peu lourde, en effet si j'ai 50 tags sur lesquels filtrer ça fait 50 sous-requetes... Code :
Merci ! |
||||
|
|
00
|
|
|
#4 | |
|
Membre Expert
![]() Inscription : juin 2007 Messages : 2 278 ![]() |
Citation:
Sinon en moins propre tu peux faire un COUNT associé à un HAVING pour ta requete |
|
|
|
00
|
|
|
#5 | |||
![]() ![]() |
Au contraire Madfrix, je pense que la bonne manière de faire est justement de compter le nombre de lignes et de le comparer au nombre d'éléments du filtre.
Citation:
Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|||
|
00
|
|
|
#6 |
|
Membre Expert
![]() Inscription : juin 2007 Messages : 2 278 ![]() |
Je partais du principe que ca fait 1 calcul dynamique à faire en plus pour calculer le "2" du HAVING
Après, niveau temps d'éxécution en fonction de la volumétrie j'en sais rien... Sur quelques lignes, c'est vrai que ca va pas changer grand chose c'est sur
|
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : mars 2008 Messages : 9 ![]() |
Bon la requête de cinephil fonctionne, je ne dirais pas que je comprend pourquoi, mais je vais essayer en tout cas.
Merci à vous deux ! |
|
|
00
|
|
|
#8 | |
![]() ![]() |
Citation:
On groupe par article et on vérifie qu'effectivement le comptage des lignes pour chaque article est bien égal au nombre de noms dans le IN. HAVING ne retient que les articles qui satisfont cette condition sur le comptage. Il te suffit de paramétrer ta requête en changeant le nombre requis pour le COUNT(*) en fonction du nombre d'éléments dans le IN.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com