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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  PB sur résultat de requête dite complexe...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

PB sur résultat de requête dite complexe...

n°1442089
le_nono
Posté le 13-09-2006 à 21:46:51  profilanswer
 

Bonjour à tous !
 
Je m'explique, ma requête est la suivante :

Code :
  1. SELECT *
  2. FROM `acteurscenario` , `acteurmusique` , `acteurdeco` , `acteurmonteur`
  3. WHERE (
  4. (
  5. `acteurscenario`.`scenar_film_id` =17061
  6. )
  7. AND (
  8. `acteurdeco`.`deco_film_id` =17061
  9. )
  10. AND (
  11. `acteurmonteur`.`monteur_film_id` =17061
  12. )
  13. AND (
  14. `acteurmusique`.`musi_film_id` =17061
  15. )
  16. )
  17. LIMIT 0 , 30


Le problème :
si dans acteurscenario je n'ai pas de correspondance à 17061, ça ne me retourne rien.
Si j'ai deux fois 17061 dans acteurscenario, j'ai deux lignes en retour.
 
Or, même si je n'ai rien dans acteurscenario, je veux le reste qui est dans deco, monteur, etc...
Et par la même n'avoir qu'une seule ligne de résultat au lieu de :

Code :
  1. scenar_id  scenar_film_id  scenar_acteur_id  scenar_annee  musi_id  musi_film_id  musi_acteur_id  musi_annee  deco_id  deco_film_id  deco_acteur_id  deco_annee  monteur_id  monteur_film_id  monteur_acteur_id  monteur_annee 
  2. 228029 17061 547688 0 2400 17061 28459 1987 34394 17061 316927 0 5073 17061 158983 1987
  3. 228030 17061 36236 0 2400 17061 28459 1987 34394 17061 316927 0 5073 17061 158983 1987


NB : il y a encore d'autres tables à joindre à cette  :fou:  de requete, et je ne vois pas trop comment jouer avec le left join !!!!
 
Si quelqu'un a la clé de cet étrange chose que je pose là... Je remercie d'avance !
 
@+
lenono

mood
Publicité
Posté le 13-09-2006 à 21:46:51  profilanswer
 

n°1442102
couak
Posté le 13-09-2006 à 22:42:16  profilanswer
 

bon je comprends pas trop ce que tu veux faire, mais qques pistes :
- problème 1 : normal, tu mets une condition "`acteurscenario`.`scenar_film_id` =17061" donc tu auras obligatoirement les lignes qui correspondent
essayes d'ajouter un OR dans ta parenthèse : (acteurscenario.scenar_film_id=17061 OR acteurscenario.scenar_film_id is null)
 
- problème 2 : tu peux ajouter dans ta clause le mot DISTINCT, cela te permettra d'éviter les doublons

Code :
  1. select distinct acteurscenario.scenar_film_id, acteurscenario.* from ...

n°1442247
betsamee
Asterisk Zeperyl
Posté le 14-09-2006 à 10:26:51  profilanswer
 

je comprend pas trop ta requete non plus
tu ne fait pas de jointures entre tes tables
tu devrais utiliser des LEFT JOIN

n°1442280
le_nono
Posté le 14-09-2006 à 11:04:00  profilanswer
 

Pour le distinct, oui c'est sur ==> suppression des doublons, 'scuse, pas réflechi plus que ça !!!
 
Le left join, je vois bien sur 2 tables : pa ni p'oblem ti male, mais dans mon cas, j'ai environ 10 tables que je voudrais lier dansune rq !
 
Suis je assez clair ?
Merci de votre aide !

n°1442533
darkfrost
Posté le 14-09-2006 à 16:17:41  profilanswer
 

J'ai à peu pres compris ce qui te dérange, mais ta logique m'échappe completement.
 
Peux tu répondre aux questions suivantes ça devrait permettre aux autres de t'aider car je n'aurais pas le temps avant demain matin :
 
- As tu une table Film quelque part ? Si oui décrit la.
- Quelle colonne tu souhaites obtenir à la fin ?
- Et comment tu comptes n'avoir qu'une seule ligne si tu as deux enregistrement différents pour 17061 dans une de tes quatres tables ?

n°1442597
moi23372
Posté le 14-09-2006 à 17:13:41  profilanswer
 

tu peux déjà faire une jointure externe pour ton premier problème (LEFT OUTER JOIN en SQL SERVER/ACCESS, le petit + en ORACLE).
 
Pour ton second problème, c'est normal d'avoir deux lignes. Mais tu auras des valeurs différentes dans certains champs.  
Donc la aussi, tu peux forcer d'avoir qu'une ligne (ROWCOUNT en ORACLe, LIMIT en MYSQL)...  
 

n°1443273
le_nono
Posté le 15-09-2006 à 21:02:50  profilanswer
 

Merci de vos réponses !
 
Je suis en mysql, mais je verrai ultérieurement le pb du nombre retourné de résultat.
 
La table film est dans une autre base, je ne veux pas pour le moment faire de jointure dessus.
 
Voici le résultat de mon avancement, les explications à suivre :

Code :
  1. SELECT cast_acteur_id,cost_acteur_id,deco_acteur_id,Af_Acteur_Id,maqui_acteur_id,monteur_acteur_id,
  2.    musi_acteur_id,photo_acteur_id,producteur_acteur_id,scenar_acteur_id,son_acteur_id,reafilmacteur_idact,
  3.    IFNULL(cast_acteur_id,NULL),
  4.    IFNULL(cost_acteur_id,NULL),
  5.    IFNULL(deco_acteur_id,NULL),
  6.    IFNULL(Af_Acteur_Id,NULL),
  7.    IFNULL(maqui_acteur_id,NULL),
  8.    IFNULL(monteur_acteur_id,NULL),
  9.    IFNULL(musi_acteur_id,NULL),
  10.    IFNULL(photo_acteur_id,NULL),
  11.    IFNULL(producteur_acteur_id,NULL),
  12.    IFNULL(scenar_acteur_id,NULL),
  13.    IFNULL(son_acteur_id,NULL),
  14.    IFNULL(reafilmacteur_idact,NULL)
  15.    FROM acteurcasting
  16.    LEFT JOIN acteurcostume ON acteurcasting.cast_film_id = acteurcostume.cost_film_id
  17.    LEFT JOIN acteurdeco ON acteurcostume.cost_film_id = acteurdeco.deco_film_id
  18.    LEFT JOIN acteurfilm ON acteurdeco.deco_film_id = acteurfilm.Af_Film_Id
  19.    LEFT JOIN acteurmaquillage ON acteurfilm.Af_Film_Id = acteurmaquillage.maqui_film_id
  20.    LEFT JOIN acteurmonteur ON acteurmaquillage.maqui_film_id = acteurmonteur.monteur_film_id
  21.    LEFT JOIN acteurmusique ON acteurmonteur.monteur_film_id = acteurmusique.musi_film_id
  22.    LEFT JOIN acteurphoto ON acteurmusique.musi_film_id = acteurphoto.photo_film_id
  23.    LEFT JOIN acteurproducteur ON acteurphoto.photo_film_id = acteurproducteur.producteur_film_id
  24.    LEFT JOIN acteurscenario ON acteurproducteur.producteur_film_id = acteurscenario.scenar_film_id
  25.    LEFT JOIN acteurson ON acteurscenario.scenar_film_id = acteurson.son_film_id
  26.    LEFT JOIN reafilmacteur ON acteurson.son_film_id = reafilmacteur.reafilmacteur_idfilm
  27.    WHERE
  28.     reafilmacteur.reafilmacteur_idfilm = 17061


 
Alors pourquoi tout ça ??
 
1/ une requete est plus rapide que 10 !
 
2/ tout récupérer d'un jet.
 
Contraintes problématiques :
Si un seul champ est à nul, alors plus mysql_num_rows = 0 !
 
Le nombre de résultat par type est totalement variable : de 1 à n ...
 
La description de la table film n'apportera rien saut à dire qu'il y a un ID unique et qu'on retrouve dans les champs idfilm ou film_id selon la fonction des personnes sur le plateau.  
Chacune de ces tables fait le lien film(idfilm)-->lien(idfilm/idpersonne)-->personne(idpersonne)
 
Voilà !
 
En tout cas, merci à tous et bon ouique ;-)


Message édité par le_nono le 16-09-2006 à 21:33:51

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

  PB sur résultat de requête dite complexe...

 

Sujets relatifs
[JAVA] Hibernate - requète SQL ALTER TABLEenvoi resultat formulaire avec mail()
pb de requete SQL (enfin je crois) dans access [résolu]EnumPrinterConnections / Extraction de résultat
Découper un résultat de requète sql trop longpb requête classement
Requete avec une clause count et sommecomment faire 1 somme totale de sommes en 1 requete SQL?
[Business Objec (webi)], probleme de requete LIKE '%blabla%'. 
Plus de sujets relatifs à : PB sur résultat de requête dite complexe...


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