VStudio 2008 et SQL Server CE => bug multiple clause AND

Résolu
Max207 Messages postés 19 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 17 octobre 2008 - 16 oct. 2008 à 22:19
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 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:

ID_FILM | ID_CATEGO
1 | 1
1 | 2
2 | 1
2 | 3
3 | 1
3 | 2

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:

8 réponses

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
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

<hr />
-My Blog-
3
ed73 Messages postés 276 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 avril 2013 2
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.
3
xmox667 Messages postés 357 Date d'inscription jeudi 8 juin 2006 Statut Membre Dernière intervention 26 décembre 2011 4
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+
0
ed73 Messages postés 276 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 avril 2013 2
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
xmox667 Messages postés 357 Date d'inscription jeudi 8 juin 2006 Statut Membre Dernière intervention 26 décembre 2011 4
17 oct. 2008 à 10:02
Salut ed73,
Tu as raison je devais avoir la tête dans le coltard dans j'ai répondu.
A+
0
Max207 Messages postés 19 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 17 octobre 2008
17 oct. 2008 à 10:57
Merci pour vos réponses.

ed73,

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à :-) ).

(c'est plus lisible ainsi)
0
Max207 Messages postés 19 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 17 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
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
17 oct. 2008 à 13:29
J'avais donc bien raison, héhé.

<hr />
-My Blog-
0
Rejoignez-nous