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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Aide pour requête...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Aide pour requête...

n°2290534
deli2025
Posté le 22-10-2016 à 19:44:21  profilanswer
 

Bonjour,
 
Je rencontre un problème pour formuler une requête sql.
 
Imaginons que j'ai une table "films", "themes" et la table de jointure "films_themes"
 
Comment puis-je trouver tous les fims qui possède le thème 1 ET le thème 2 ?
 
Ça parait simple mais je n'y arrive pas...
 
Merci d'avance pour votre aide

mood
Publicité
Posté le 22-10-2016 à 19:44:21  profilanswer
 

n°2290538
stupidduck
Posté le 22-10-2016 à 22:07:11  profilanswer
 

select nomfilm from films
natural join films_themes
where films_themes.idtheme = (
    select idtheme from themes
    where denomination like 'bisounours' or denomination like 'hardcore');

 

? ca marche ça ?


Message édité par stupidduck le 22-10-2016 à 22:07:25
n°2290539
deli2025
Posté le 22-10-2016 à 23:57:07  profilanswer
 

En fait, c'est en JPQL que je dois la formuler et je dois utiliser les id...
 
Voici ce que j'ai essayé  
 
SELECT distinct new Film(f.id, f.titre, f.alphabetique, f.cover, f.url)  
FROM Film f  
LEFT JOIN f.categorieFilm c LEFT JOIN f.themes t  
WHERE c.id = 1 AND f.valide = true AND t.id = :theme1 AND t.id = :theme2  
ORDER BY f.id DESC

n°2290547
stupidduck
Posté le 23-10-2016 à 11:28:09  profilanswer
 

du jean-pol query langage ? ( ;) ) connais pas.

 

sinon, autre piste (il était tard hier...) une intersection.

 

(juste avec les id, après libre a toi de faire les join kivontbien pour récup les titres / catégories)

 

select idfilm from films_themes where idtheme = XX
intersect
select idfilm from films_themes where idtheme = YY

 

si intersect est pas géré par ton sgbd, y a moyen de s'en sortie avec des différences. A intersect B équivaut à A - (A - B)...


Message édité par stupidduck le 23-10-2016 à 11:29:58
n°2290562
rufo
Pas me confondre avec Lycos!
Posté le 24-10-2016 à 10:10:35  profilanswer
 

SELECT f1.IDFilm, f1.TitreFilm
FROM films f1 INNER JOIN films_themes ft1 ON (f1.IDFilm = ft1.IDFilm), films f2 INNER JOIN films_themes ft2 ON (f2.IDFilm = ft2.IDFilm)
WHERE f1.IDFilm = f2.IDFilm AND ft1.IDTheme = XX AND ft2.IDTheme = YY AND ft1.IDTheme <> ft2.IDTheme
GROUP BY f1.IDFilm


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2290982
deli2025
Posté le 01-11-2016 à 14:36:53  profilanswer
 

Rufo, ta requête fonctionne parfaitement une fois traduite :) Je n'en comprends pas encore tout le sens mais bon...
 
Merci à vous.

n°2290983
rufo
Pas me confondre avec Lycos!
Posté le 01-11-2016 à 15:30:53  profilanswer
 

Il y a une relation 1-n entre films et films_themes. Donc, en une seule jointure entre les 2 tables, c'est pas possible de trouver des films qui ont 2 thèmes différents, c'est-à-dire, des thèmes avec des ID différents. Du coup, vu qu'on va travailler qu'avec des ID de thèmes, on n'a pas besoin de la table thèmes.
 
Je fais donc 2 jointures entre la table films et la table films_themes. Pour la première jointure, je vais rechercher les films qui ont le thème ayant pour ID = XX ; avec la 2ème jointure, je recherche les films qui ont le thème ayant ID = YY.
 
Si je m'arrête sur ces 2 conditions, c'est le bazar dans le résultat ; j'ai pleins de doublons et j'ai pas les films qui ont les 2 thèmes ; j'ai des films qui ont l'un ou l'autre et des fois, les 2. Pour conserver juste les films qui ont les 2 thèmes, j'ajoute 2 conditions :  
1) les films obtenus dans le résultat doivent avoir le même ID dans les jointures -> f1.IDFilm = f2.IDFilm -> ça permet d'avoir que les films qui ont les thèmes ID = XX ET ID = YY
2) il faut éliminer les films que les jointures ont ramené avec des thèmes YY dans la première jointure et XX dans la 2ème et inversement (en gros, la 1ère jointure ne doit pas me ramener les mêmes thèmes que ceux de la 2ème jointure) -> ft1.IDTheme <> ft2.IDTheme
 
C'est plus clair ?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta

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

  Aide pour requête...

 

Sujets relatifs
[Aide] HTML/CSS - Réinitialiser une requêteAide pour finir - requete SQL avec search avec jointures
Aide urgente SVP pour la correction d'une requête ![SQL] Aide requête avec enregistrement facultatif
(SQL] AIde pour requèteMySQL : aide pour une requête
[PL SQL] Aide sur requeteaide requête sql updateen fonction champ autre table
[Resolu] Aide RequêteAide pour requete SQL
Plus de sujets relatifs à : Aide pour requête...


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