Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1896 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Extraction mulitples sur un champ

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Extraction mulitples sur un champ

n°2036322
sebnutt
Un petit rien du tout
Posté le 16-11-2010 à 14:28:48  profilanswer
 

bonjour
 
j'ai une table présentée comme telle.
 
film | personne
--------------------
1 | Eric
1 | Samuel
2 | Eric
3 | Eric
5 | Samuel
 
je voudrais faire un SELECT personne avec un WHERE avec films 1,2 et 3 pour qu'il m'affiche la seule personne qui a les 3 films, soit "Eric"
 
comment rédiger ma requête ?

mood
Publicité
Posté le 16-11-2010 à 14:28:48  profilanswer
 

n°2036333
skeye
Posté le 16-11-2010 à 14:42:07  profilanswer
 

Quel SGBD?


---------------
Can't buy what I want because it's free -
n°2036338
sebnutt
Un petit rien du tout
Posté le 16-11-2010 à 14:50:08  profilanswer
 

mysql

 

j'ai pensé à faire un truc du genre

 
Code :
  1. SELECT personne FROM table WHERE film = 1 AND film = 2 AND film = 3
 

mais évidemment, ça me sort aucun enregistrement.

Message cité 1 fois
Message édité par sebnutt le 16-11-2010 à 14:51:37
n°2036350
skeye
Posté le 16-11-2010 à 15:06:55  profilanswer
 

sebnutt a écrit :

mysql

 

j'ai pensé à faire un truc du genre

 
Code :
  1. SELECT personne FROM table WHERE film = 1 AND film = 2 AND film = 3
 

mais évidemment, ça me sort aucun enregistrement.

 

Ceci devrait pouvoir fonctionner (si tu n'as pas de doublons sur (personne, film) dans ta table) :

 

select personne, count(*)
from table
where film in (1, 2, 3)
group by personne
having count(*) = 3;


Message édité par skeye le 16-11-2010 à 15:07:17

---------------
Can't buy what I want because it's free -
n°2036359
sebnutt
Un petit rien du tout
Posté le 16-11-2010 à 15:18:28  profilanswer
 

il me sort

 

Eric
Samuel

 

on dirait que le film in (1,2,3) utilise un OR par défaut, soit l'équivalent de
SELECT personne FROM table WHERE film = 1 OR film = 2 OR film = 3

 

il me faudrait la meme requete mais je veux sortir la ou les personnes qui ont forcément tous les films spécifiés


Message édité par sebnutt le 16-11-2010 à 15:20:26
n°2036365
skeye
Posté le 16-11-2010 à 15:20:38  profilanswer
 

Hein?
Samuel n'apparait que 2 fois dans ta table...tu as bien mis le having?[:autobot]


---------------
Can't buy what I want because it's free -
n°2036383
sebnutt
Un petit rien du tout
Posté le 16-11-2010 à 15:32:19  profilanswer
 

C'est bon, j'ai réussi à l'adapter. T'es un bon !
un grand merci.

n°2036391
sebnutt
Un petit rien du tout
Posté le 16-11-2010 à 15:56:13  profilanswer
 

juste un truc par contre si je fais
 
select personne
from table
where film in (1,5)
group by personne
having count(*) = 2;  
 
ca me sort les deux noms parce que l'un et l'autre ont au moins 2 films dans la liste.
comment ne récupérer que ceux qui ont les X films correspondant au nombre choisis ? pas ce qui sont <= X mais ceux qui sont = X ??

n°2036394
skeye
Posté le 16-11-2010 à 15:59:10  profilanswer
 

sebnutt a écrit :

juste un truc par contre si je fais
 
select personne
from table
where film in (1,5)
group by personne
having count(*) = 2;  
 
ca me sort les deux noms parce que l'un et l'autre ont au moins 2 films dans la liste.


ça ne correspond pas à ton jeu de données du départ, ça.
Tu ne devrais pas avoir Eric, qui n'a qu'un film parmi (1,5)...


---------------
Can't buy what I want because it's free -
n°2036397
sebnutt
Un petit rien du tout
Posté le 16-11-2010 à 16:11:18  profilanswer
 

le where film in (1,5) indique que personne doit avoir forcément 1 et 5 / ou bien 1 ou 5 pour apparaitre dans le résultat du select ?

mood
Publicité
Posté le 16-11-2010 à 16:11:18  profilanswer
 

n°2036400
skeye
Posté le 16-11-2010 à 16:15:20  profilanswer
 

sebnutt a écrit :

le where film in (1,5) indique que personne doit avoir forcément 1 et 5 / ou bien 1 ou 5 pour apparaitre dans le résultat du select ?


Cela indique qu'on ne garde que les lignes pour lesquelles film vaut soit 1, soit 5.
Ensuite via le count(*) / group by on compte pour chaque personne combien de lignes cela retourne.
Et via le having on indique qu'on ne garde que les personnes pour lesquelles le nombre de lignes correspond au nombre de films attendus.
 
D'ailleurs il manque le count(*) dans ton select, c'est normal?


---------------
Can't buy what I want because it's free -
n°2036404
sebnutt
Un petit rien du tout
Posté le 16-11-2010 à 16:28:17  profilanswer
 

euh je pensais ne pas en avoir besoin, alors je l'ai enlevé... je vais essayé avec
edit : ca change rien.
re-edit : ca marche nickel en mettant le count(*) maintenant que j'ai eu ton explication pas à pas.

 

encore merci


Message édité par sebnutt le 17-11-2010 à 09:52:23

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Extraction mulitples sur un champ

 

Sujets relatifs
Récuperer objet dans tableau en fonction du champ d'un objetChamp Disabled mais submitable
Champ en MEDIUMTEXT à la place de VARCHAR : moins rapide?extraction de contenus d'un fichier texte
les champ d'une liste deroulante depende d'un champs.Algorithme d'extraction de courbe
utilisation d'un champ date dans une modal "jquery"recup champ aleatoire dans liste de champs
ajoute une ligne de champ renseignée sur un formulaireBloquer champ formulaire creer avec Acrobat
Plus de sujets relatifs à : Extraction mulitples sur un champ


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR