Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/09/2011, 11h03   #1
Invité de passage
 
Homme Francis MARCHAND
Inscription : septembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Nom : Homme Francis MARCHAND
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2011
Messages : 5
Points : 1
Points : 1
Par défaut Trouver une valeur commune à plusieurs enregistrements

Bonjour,

Je bute sur une requête qui paraissait pourtant simple :

J'ai ma table SERIES qui contient deux colonnes : serie et NO_QCM. Chaque NO_QCM est associé à un ou plusieurs numéros de série. Je voudrais trouver la série qui correspond à un paquet de NO_QCM, à savoir trouver la série qui est commune à un certain nombre de QCM. Le but est qu'en entrant les numéros de QCM d'un sujet, le biniou me dise si le sujet existe déjà ou pas dans la base de données.

Exemple :

serie | NO_QCM
S1 | 1234
S1 | 4567
S1 | 8910
S2 | 1234
S2 | 4321
S2 | 5589

Moi, innocemment, j'ai commencé par essayer :
Code :
SELECT serie FROM series WHERE NO_QCM = '1234' AND NO_QCM = '4567' AND NO_QCM = '8910'
en espérant que ça me sorte S1. Mais non ! Ca ne renvoie aucune ligne.

J'ai essayé tout un tas de variation : parenthèses, OR à la place de AND, IN ('1234', etc.) mais c'est l'échec complet.

J'en appelle donc aux compétences présentes sur ce forum
chezgligli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 11h19   #2
Modérateur
 
Avatar de Cybher
 
Homme Michel
Consultant informatique
Inscription : mai 2005
Messages : 3 006
Détails du profil
Informations personnelles :
Nom : Homme Michel
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : mai 2005
Messages : 3 006
Points : 4 039
Points : 4 039
salut,

oui en effet, cela ne peut pas fonctionner comme cela car tu n'as pas un tuple qui correspond à l'ensemble de tes critères

tu peux écrire comme ceci
Code :
1
2
3
4
SELECT serie FROM series 
WHERE NO_QCM IN ('1234', '4567', '8910')
GROUP BY serie
HAVING count(*)=3
Cybher est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 18h02   #3
Invité de passage
 
Homme Francis MARCHAND
Inscription : septembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Nom : Homme Francis MARCHAND
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2011
Messages : 5
Points : 1
Points : 1
Citation:
Envoyé par Cybher Voir le message
oui en effet, cela ne peut pas fonctionner comme cela car tu n'as pas un tuple qui correspond à l'ensemble de tes critères
Hum, j'avoue que je ne comprends pas pourquoi ma première requête ne marche pas, mais ce n'est pas bien grave, la tienne fonctionne

Merci beaucoup !
chezgligli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2011, 11h10   #4
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 530
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

Informations professionnelles :
Activité : Retraité
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : novembre 2005
Messages : 2 530
Points : 3 523
Points : 3 523
Citation:
Envoyé par chezgligli Voir le message
Hum, j'avoue que je ne comprends pas pourquoi ma première requête ne marche pas,
Saluton,
Réfléchis 2 secondes, NO_QCM ne peut pas être, à la fois, au sein de la même ligne de la table, égal à '1234' ET égal à '4567' ET égal à '8910'.
La syntaxe proposée par Cybher équivaut, en plus synthétique, à remplacer les AND de ta requête par des OR.
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
articles : Comment émuler un tableau croisé [quasi] dynamique
et : Une énigme mathématique résolue avec MySQL
recommande l'utilisation de PDO (PHP5 Data Objects)
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 08h02   #5
Invité de passage
 
Homme Francis MARCHAND
Inscription : septembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Nom : Homme Francis MARCHAND
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2011
Messages : 5
Points : 1
Points : 1
Citation:
Envoyé par Maljuna Kris Voir le message
La syntaxe proposée par Cybher équivaut, en plus synthétique, à remplacer les AND de ta requête par des OR.
Pas tout à fait, car si je remplace les AND par des OR, ça me sort toutes les séries qui correspondent à au moins un NO_QCM donné. Or, ce que je veux, et que j'ai grâce à Cybher, c'est la série qui correspond à tous les NO_QCM donnés.

Mais ce n'est pas bien grave, si je ne pige pas, ça marche
chezgligli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 08h30   #6
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 530
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

Informations professionnelles :
Activité : Retraité
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : novembre 2005
Messages : 2 530
Points : 3 523
Points : 3 523
Ça c'est lié au GROUP BY et son filtre HAVING, pas à la clause WHERE.
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
articles : Comment émuler un tableau croisé [quasi] dynamique
et : Une énigme mathématique résolue avec MySQL
recommande l'utilisation de PDO (PHP5 Data Objects)
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h39.


 
 
 
 
Partenaires

Hébergement Web