Max207
Messages postés19Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention17 octobre 2008
-
16 oct. 2008 à 22:19
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 2013
-
17 oct. 2008 à 13:29
Bonjour ou bonsoir!
J'ai téléchargé le VStudio Express 2008 C# afin de coder une petite application de gestion d'une bibliothèque de film. J'ai utilisé SQL CE (3.5) comme base de données. J'ai donc créé mes tables, mes fichiers .cs et tout le tralala et ça a très bien fonctionné jusque ici. Cependant, là, je suis confronté à un problème dont j'ignore l'origine ou peut-être est-ce là un bug...
Nivo SQL j'ai une table nommée CATEGO_FILM qui sert de liaison entre ma table FILM et CATEGORIE. Ma table FILM sert à stocker les films avec leur titre. Ma table Catégorie sert à stocker les catégories de film (science-fiction, fantastique, épouvante, etc.). Un film peut donc avoir plusieur catégorie (table CATEGO_FILM). Donc voilà, ça c'était pour planter le décor.
Dans mon application, j'ai développé une fonctionnalité qui permet d'afficher une liste de film en cochant des checkboxs correspondant aux catégories.
J'ai donc dans ma table CATEGO_FILM quelque chose du genre:
Si je construis ma requete par programmation et que j'obtiens quelque chose comme ceci:
SELECT ID_FILM FROM CATEGO_FILM WHERE ID_CATEGO = 1
alors j'obtiens logiquement les id_films suivant: 1,2,3
Si j'ai plusieurs catégorie, je construis ma requête comme ceci:SELECT ID_FILM FROM CATEGO_FILM WHERE ID_CATEGO <gras>1 AND ID_CATEGO 2</gras>
je devrai avoir l'id du film: 1 et 3 MAIS je n'obtiens rien...
Je ne suis pas un crack en SQL CE mais il me semble que ma requête SQL est correct ou alors il faut utiliser une autre syntaxe pour faire ce que je veux faire...
Avez-vous la clé du problème ?
Merci
A voir également:
VStudio 2008 et SQL Server CE => bug multiple clause AND
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 17 oct. 2008 à 08:44
Salut,
Je ne suis pas un pro du SQL non plus, mais je ne pense pas que la requete soit correcte (en passant, pour le SQL, tu as meilleur temps de poster sur www.sqlfr.com).
Moi je ferais un group by sur ID_FILM et ensuite un HAVING pour mettre les conditions...
Mais encore une fois, le SQL c'est pas mon fort
ed73
Messages postés276Date d'inscriptionlundi 8 septembre 2008StatutMembreDernière intervention15 avril 20132 17 oct. 2008 à 11:51
Bon, j'avais lu ton premier mail un peu vite ;-)
Voici une requête qui marche :
SELECT ID_FILM
FROM CATEGO_FILMWHERE ID_CATEGO 1 OR ID_CATEGO 2
GROUP BY ID_FILM
HAVING COUNT(ID_FILM) =2
Si ton film est de catégorie 1 et 2 alors tu auras 2 enregistrements (films 1 et 3) mais s'il est de catégorie 1 ou 2 tu n'en auras qu'un seul (film 2) et la clause having le retire des enregistrements renvoyés.
xmox667
Messages postés357Date d'inscriptionjeudi 8 juin 2006StatutMembreDernière intervention26 décembre 20114 17 oct. 2008 à 07:59
Salut,
Ta requête SQL est correcte.
Le résultat par contre sera : 1,2 et 3
Vérifie que ta table CATEGO_FILM ne soit pas vide:
Select * from CATEGO_FILM
A+
ed73
Messages postés276Date d'inscriptionlundi 8 septembre 2008StatutMembreDernière intervention15 avril 20132 17 oct. 2008 à 09:49
Bonjour,
La requête n'est pas correcte car ID_CATEGO ne peut être égal à 1 et à 2 en même temps, il faut utiliser OR au lieu de AND :
SELECT ID_FILM FROM CATEGO_FILM WHERE ID_CATEGO 1 OR ID_CATEGO 2
Tu obtiendras 1,1,3,3 ensuite il faut grouper les enregistrements obtenus si tu souhaites seulement 1,3
SELECT ID_FILM FROM CATEGO_FILM WHERE ID_CATEGO 1 OR ID_CATEGO 2 GROUP BY ID_FILM
Vous n’avez pas trouvé la réponse que vous recherchez ?
J'ai déjà tenté le OR et donc fait ceci comme toi: SELECT ID_FILM FROM CATEGO_FILM WHERE ID_CATEGO <gras>1 OR ID_CATEGO 2</gras>
Mais cela me retourne comme id_film: 1,2,3 ! Et c'est logique car l'id_film 2 contient bien l'id_categorie 2.
Ce que je cherche à faire , c'est d'afficher uniquement les films ayant comme id catégorie 1 et 2. Je cherche toujours mais sans succès (enfin pas tout de suite car je suis au boulot là :-) ).
Max207
Messages postés19Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention17 octobre 2008 17 oct. 2008 à 13:22
Salut ed73,
C'est exactement ce que je cherchais et c'est fonctionnel à 100 %
J'ai réussi à automatiser la construction de la requête maintenant et ma recherche est correct! Je savais que j'aurai pas du brosser certain cours de SQL dans le temps .
Parait qu'il y avait aussi une autre solution avec un INTERSECT ... mais celui-ci n'est pas pris en charge par SQL CE.
Merci beaucoup de ton aide en tout cas car j'étais vraiment bloqué.
Bonne journée