IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Requête avec jointure qui remonte pas les bonnes info


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2012
    Messages : 19
    Par défaut Requête avec jointure qui remonte pas les bonnes info
    Bonjour,

    J'essaye de remonter via une requête mysql tous les scénarios et de remonter 1 seule photo (si il en existe - il peut aussi en exister plusieurs)

    Un essaie (infruction) était :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    SELECT distinct s1.id, s1.titre, s1.joueur, s1.niveau, s1.description, s1.id_societe, s1.etat, s1.type, s2.nom, s2.adresse, s2.cp, s2.ville, s2.pays, s2.website, s2.etat as etat_societe, AVG(a1.note_escape) as note_escape, AVG(a1.note_ambiance) as note_ambiance, t2.path, t2.name
    			FROM scenario AS s1			
    			INNER JOIN societe AS s2 ON (s1.id_societe = s2.id)
    			LEFT JOIN file AS f1 ON (s2.id_file=f1.id_file)	  
    			LEFT JOIN avis AS a1 ON (s1.id=a1.id_scenario) 
     
    			LEFT JOIN (
    				SELECT i1.path, i1.name, f2.id_scenario 
    				FROM file AS i1
    				INNER JOIN scenario_img AS f2 ON (i1.id_file=f2.id_file)	  
    				ORDER BY RAND() LIMIT 1
    			) t2
    			ON t2.id_scenario = s1.id		
    			GROUP BY s1.id, s1.titre, s1.joueur, s1.niveau, s1.description, s1.id_societe, s1.etat, s1.type, s2.nom, s2.adresse, s2.cp, s2.ville, s2.pays, s2.website, s2.etat, t2.path, t2.name
    Le code fonctionne, mais ne me remonte pas toujours de photo, même quand il en a...
    Avez-vous une idée?
    Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 462
    Par défaut
    Bonjour,
    Tu nous parles de photos, mais je ne vois pas le terme en question dans la requête.
    On ne sait donc pas d'où doit sortir cette photo.
    Il nous manque aussi la description des tables, un jeu de test et le résultat attendu.

    Tatayo.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2012
    Messages : 19
    Par défaut
    Bonsoir,

    La photo et son chemin son contenu dans les champs t2.path, t2.name

    La table file contient les informations des photos
    la table scenario_img sert de jointure entre les id_scenario et id_file

    Merci

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 462
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Bonjour,
    Il nous manque aussi la description des tables, un jeu de test et le résultat attendu.

    Tatayo.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2012
    Messages : 19
    Par défaut
    Bonsoir,
    Voici les tables qui me semblent importantes à partager

    Table scenario
    Nom : FireShot Capture 141 - pma.attitude-web.fr _ localhost _ escape _ scenario - phpMyAdmin 4.9._ - .png
Affichages : 258
Taille : 16,0 Ko

    Table file
    Nom : FireShot Capture 143 - pma.attitude-web.fr _ localhost _ escape _ file - phpMyAdmin 4.9.5deb_ - .png
Affichages : 260
Taille : 15,5 Ko

    Table scenario_img
    Nom : FireShot Capture 142 - pma.attitude-web.fr _ localhost _ escape _ scenario_img - phpMyAdmin _ - .png
Affichages : 260
Taille : 5,9 Ko

    Et quand je joue la requête ca me donne (j'ai enlever le champ description pour une meilleur visibilité)
    Nom : FireShot Capture 144 - pma.attitude-web.fr _ localhost _ escape _ societe - phpMyAdmin 4.9.5_ - .png
Affichages : 256
Taille : 40,2 Ko

    J'ai donc les champs path et name qui sont vides

    Et si je fais une requete que vers 1 seul id_scenario, idem j'ai rien dans path et name alors que je sais que j'ai bien des images qui devraient remontrer (enfin 1 seule)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    SELECT distinct s1.id, s1.titre, s1.joueur, s1.niveau, s1.id_societe, s1.etat, s1.type, s2.nom, s2.adresse, s2.cp, s2.ville, s2.pays, s2.website, s2.etat as etat_societe, AVG(a1.note_escape) as note_escape, AVG(a1.note_ambiance) as note_ambiance, t2.path, t2.name
    			FROM scenario AS s1			
    			INNER JOIN societe AS s2 ON (s1.id_societe = s2.id)
    			LEFT JOIN file AS f1 ON (s2.id_file=f1.id_file)	  
    			LEFT JOIN avis AS a1 ON (s1.id=a1.id_scenario) 
     
    			LEFT JOIN (
    				SELECT i1.path, i1.name, f2.id_scenario 
    				FROM file AS i1
    				INNER JOIN scenario_img AS f2 ON (i1.id_file=f2.id_file)	  
    				WHERE f2.id = 961
    				ORDER BY RAND() LIMIT 1
    			) t2
    			ON t2.id_scenario = s1.id		
    			WHERE s1.id = 961
    			GROUP BY s1.id, s1.titre, s1.joueur, s1.niveau, s1.id_societe, s1.etat, s1.type, s2.nom, s2.adresse, s2.cp, s2.ville, s2.pays, s2.website, s2.etat, t2.path, t2.name
    Merci

  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 462
    Par défaut
    Je pense que tu as un mauvais filtre dans la sous-requête:
    • Tu fait en premier S1.id = 960 => c'est donc l'id du scenario
    • Ensuite dans la sous-requête => f2.id = 961 : ce n'est pas l'id du scenario, qui ets dans la colonne id_scenario
    • Enfin dans la requête principale, la jointure se fair entre t2.id_scenario et s1.id. C'est bien la preuve que le filtre de la sous-requête est faux


    Enfin c'est ce qui ressort de l'étude de la requête, mais sans jeu de test il est difficile d'affirmer quoi que ce soit.

    Tatayo.

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2012
    Messages : 19
    Par défaut
    Oui tu as raison, si je me plante dans mes exemples et test je vais pas y arriver !

    Donc en en effet la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    SELECT distinct s1.id, s1.titre, s1.joueur, s1.niveau, s1.id_societe, s1.etat, s1.type, s2.nom, s2.adresse, s2.cp, s2.ville, s2.pays, s2.website, s2.etat as etat_societe, AVG(a1.note_escape) as note_escape, AVG(a1.note_ambiance) as note_ambiance, t2.path, t2.name
    			FROM scenario AS s1			
    			INNER JOIN societe AS s2 ON (s1.id_societe = s2.id)
    			LEFT JOIN file AS f1 ON (s2.id_file=f1.id_file)	  
    			LEFT JOIN avis AS a1 ON (s1.id=a1.id_scenario) 
     
    			LEFT JOIN (
    				SELECT i1.path, i1.name, f2.id_scenario 
    				FROM file AS i1
    				INNER JOIN scenario_img AS f2 ON (i1.id_file=f2.id_file)	  
    				WHERE f2.id_scenario = 961
    				ORDER BY RAND() LIMIT 1
    			) t2
    			ON t2.id_scenario = s1.id		
    			WHERE s1.id = 961
    			GROUP BY s1.id, s1.titre, s1.joueur, s1.niveau, s1.id_societe, s1.etat, s1.type, s2.nom, s2.adresse, s2.cp, s2.ville, s2.pays, s2.website, s2.etat, t2.path, t2.name
    me donne bien des données pour path et name (et donc le chemin de mon image)

    Et dans je supprime les conditions de where, pour ce meme id_scenario je n'ai plus les info d'images...

    Qu'entends-tu par jeu de test du coup ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/07/2020, 09h09
  2. Requête avec jointure qui retourne null si pas de valeur
    Par jubourbon dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/09/2011, 11h10
  3. requête avec jointure qui renvoie des résultats bizarres
    Par Canari74 dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 20/05/2008, 02h13
  4. requête avec paramètre qui marche pas
    Par funkyjul dans le forum VBA Access
    Réponses: 7
    Dernier message: 18/04/2008, 13h37
  5. Requete avec jointure qui marche pas
    Par gloubi dans le forum Langage SQL
    Réponses: 13
    Dernier message: 14/02/2008, 16h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo