8791 sujets

Développement web côté serveur, CMS

Salut à tous,

J'ai besoin d'un petit coup de main pour l'élaboration d'un site perso.
J'ai développé un formulaire permettant de trier des articles suivant différents critères, mais je bloque sur la requête permettant de récupérer les articles qui répondent à ces critères.
Lors de l'envoi du formulaire je récupère un tableau contenant les ids des critères sélectionnés.
Ensuite je selectionne les ids des articles correspondant dans la table suivante CRITERE_ASSOCIE[id_article,id_critere].
Chaque article peut avoir plusieurs critères associés.

En gros ce que je cherche à faire c'est une requête du style :

SELECT id_article FROM CRITERE_ASSOCIE WHERE id_critere IN (Array_critere).

Mais avec 'IN' strict. C'est à dire que l'article doit obligatoirement avoir tous les critères sélectionnés et non seulement un seul parmi ceux du tableau ( ce que me retourne cette requête Smiley decu )

Si quelqu'un a une petite idée,
thank you à vous
Modifié par near54 (30 May 2010 - 22:20)
Salut,

Tout d'abord je pense qu'on peut considérer qu'un même critère ne sera pas présent deux fois pour un même article dans ta table. Si ce n'est pas le cas, ce qui suit ne fonctionnera pas. Mais comme je suis sûr que tu as correctement rempli tout ça, ca ne posera pas de problème. Smiley cligne

Alors, je ne dis pas que c'est le plus efficace, mais ceci devrait fonctionner :

SELECT `id_article` FROM (
     SELECT `id_article`, COUNT(`id_article`) as `nb_criteres` 
     FROM `CRITERE_ASSOCIE` 
     WHERE `id_critere` IN (1,2,3) GROUP BY `id_article`
     ) AS `derived_CRITERE_ASSOCIE` 
WHERE `nb_criteres` = 3

Où bien entendu tu remplaces (1,2,3) par les id de tes critères, et où tu remplaces le 3 final par le nombre de critères à prendre en compte (je ne connais pas de fonction en sql permettant de compter le nombre d'éléments dans un array... Smiley ohwell ).

Si tu as besoin d'explications sur la requête fais moi signe.
Modifié par pixelb (31 May 2010 - 10:33)
salut pixelb, nikel ta requête, ça marche très bien. J'aurais pas pensé à faire ça de cette façon Smiley cligne
Reste à voir si ce n'est pas trop lourd avec beaucoup d'entrées en BDD et une recherche sur de nombreux critères.

Merci à toi !!
Oui effectivement...
J'ai aussi chercher pour avoir un IN inclusif mais apparemment ça n'existe pas. (Je ne l'ai pas trouvé en tout cas Smiley cligne )
S'il est possible de construire la requête dans le code on peut aussi imaginer quelque chose comme ceci (ici en PHP):


$sql="
SELECT id_article FROM CRITERE_ASSOCIE
WHERE id_critere = ".implode(" AND id_critere = ",$Array_critere)."
 ; ";