8722 sujets

Développement web côté serveur, CMS

Je refait un sujet car je m'étais mal expliqué.
Bonjour , j'ai crée un système de recherche tout simple.

Donc j'ai ma variable


$labelCategory = $_POST['search'];

qui contient la variable de la recheche que l'utilisateur à entré.

Prenons pour exemple que l'utilisateur est tapper Jaune :

J'obtient sans problème à l'aide de ma fonction SQL les videos qui correspondent au labelCategory = Jaune

Voici ma fonction SQL :


SELECT * FROM video WHERE idVideo IN (SELECT idVideo from possess WHERE idCategory IN (SELECT idCategory FROM category WHERE labelCategory LIKE '%$labelCategory'))


Mais le problème c'est que une vidéo peut posséder plusieurs labelCategory, par exemple si l'utilisateur entre Jaune Bleu, je n'arrive pas à avoir les vidéos qui possède à la fois le labelCategory Jaune et le labelCategory Bleu.

Bien sur ce n'est que une partie du code de mon système de recherche mais je pense que le problème viens de là.

Si vous avez besoin de plus d'informations il suffit de me demander.

Merci d'avance pour vos réponses ! Smiley smile
Salut,

Pourquoi n'utilises-tu pas de jointure dans ta requête, plutôt que d'imbriquer des sous-requêtes ? Une requête de ce style devrait être plus cohérente (en partant du principe que les clés étrangères sont définies correctement) :

SELECT * FROM video AS v
JOIN possess AS p ON p.idVideo = v.idVideo
JOIN category AS c ON p.idCategory = c.idCategory
WHERE labelCategory LIKE 'Jaune'


Si tu souhaites tester la présence de plusieurs catégories associées à tes vidéos, tu devras ajouter des paramètres à ta requête SQL en utilisant des OR. L'inconvénient, à ma connaissance, c'est que tu peux pas faire varier dynamiquement le nombre de paramètre dans ta requête SQL. À confirmer.
Meilleure solution