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 01/02/2011, 12h54   #1
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 10
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 10
Points : 25
Points : 25
Par défaut Probleme avec une requete sql

Bonjour,

j'essaye de faire une requete SQL mais je n'arrrive pas à la trouver. Voila mon probleme :

Une table avec 2 champs sid(int) et cid(int)
---------
sid | cid |
---------
1 | 204 |
---------
1 | 209 |
---------
2 | 105 |
---------
3 | 204 |
---------
3 | 209 |
---------
Mon but est de récupérer les sid qui ont pour cid 204 et 209(etc) donc dans ce cas le sid 1 et 3

Merci d'avance
kraven30 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2011, 13h12   #2
Membre du Club
 
Inscription : août 2009
Messages : 66
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 66
Points : 69
Points : 69
Code :
1
2
3
4
5
6
 
SELECT
  DISTINCT sid
WHERE
  cid IN (204,209)
;
NicoD. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2011, 13h15   #3
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 10
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 10
Points : 25
Points : 25
Ca serait trop simple si c'etait ça et le IN fait un OR et non un AND
kraven30 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2011, 13h23   #4
Membre Expert
 
Avatar de Nudger
 
Homme Thomas Arnaud
Directeur de projet
Inscription : octobre 2010
Messages : 452
Détails du profil
Informations personnelles :
Nom : Homme Thomas Arnaud
Âge : 36
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Directeur de projet
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : octobre 2010
Messages : 452
Points : 1 012
Points : 1 012
Envoyer un message via Skype™ à Nudger
Bonjour,

Une solution:
Code :
1
2
3
4
SELECT DISTINCT sid
FROM la_table
WHERE cid = 204
 AND sid IN (SELECT sid FROM la_table WHERE cid = 209)
__________________
www.nudge.org Surveillez et optimisez vos applications Java
Nudger est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2011, 13h30   #5
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 10
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 10
Points : 25
Points : 25
En effet, cette solution fonctionne mais si je dois faire une recherche dans plus de 15 cid(ce qui va arriver souvent), je vais avoir une requete tres longue et donc tres lente. Mais d'un coté, je ne vois pas d'autres solutions
kraven30 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2011, 13h43   #6
Membre du Club
 
Inscription : août 2009
Messages : 66
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 66
Points : 69
Points : 69
Citation:
Envoyé par kraven30 Voir le message
Ca serait trop simple si c'etait ça et le IN fait un OR et non un AND
Au temps pour moi, j'ai lu ton message un peu trop vite.

Une idée peut-être un peu plus élégante serait alors celle-ci :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
SELECT
  sid,
  count(*)
FROM
  la_table
WHERE
  cid IN (204, 209)
GROUP BY
  sid
HAVING
  COUNT(*)=2
;
(A vérifier pour la syntaxe du HAVING que je n'utilise que rarement)

Si ta requête est générée dynamiquement par un script il y a un moyen de l'écrire en utilisant d'un côté le tableau de cid et de l'autre la taille de celui-ci.
NicoD. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2011, 14h39   #7
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
je pense que ceci devrait marcher...
Code :
1
2
3
4
5
6
7
8
9
 
SELECT sid
FROM t AS t1 
 INNER JOIN t AS t2 ON t1.sid= t2.sid
 INNER JOIN t AS t3 ON t1.sid= t3.sid
WHERE 
  t1.cid = :value1 AND 
  t2.cid = :value2 AND
  t3.cid = :value3
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2011, 16h18   #8
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 990
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 990
Points : 18 241
Points : 18 241
Envoyer un message via MSN à CinePhil
La requête avec HAVING de NicoD est la bonne.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2011, 16h47   #9
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 10
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 10
Points : 25
Points : 25
Ahh , merci à vous tous pour votre rapidité. J'avais également zappé le HAVING
kraven30 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 07h07.


 
 
 
 
Partenaires

Hébergement Web