Extraction mulitples sur un champ - SQL/NoSQL - Programmation
Marsh Posté le 16-11-2010 à 14:42:07
Quel SGBD?
Marsh Posté le 16-11-2010 à 14:50:08
mysql
j'ai pensé à faire un truc du genre
Code :
|
mais évidemment, ça me sort aucun enregistrement.
Marsh Posté le 16-11-2010 à 15:06:55
sebnutt a écrit : mysql j'ai pensé à faire un truc du genre
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;
Marsh Posté le 16-11-2010 à 15:18:28
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
Marsh Posté le 16-11-2010 à 15:20:38
Hein?
Samuel n'apparait que 2 fois dans ta table...tu as bien mis le having?
Marsh Posté le 16-11-2010 à 15:32:19
C'est bon, j'ai réussi à l'adapter. T'es un bon !
un grand merci.
Marsh Posté le 16-11-2010 à 15:56:13
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 ??
Marsh Posté le 16-11-2010 à 15:59:10
sebnutt a écrit : juste un truc par contre si je fais |
ç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)...
Marsh Posté le 16-11-2010 à 16:11:18
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 ?
Marsh Posté le 16-11-2010 à 16:15:20
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?
Marsh Posté le 16-11-2010 à 16:28:17
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
Marsh Posté le 16-11-2010 à 14:28:48
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 ?