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 une jointure


Sujet :

Requêtes MySQL

  1. #1
    Membre éclairé Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Points : 723
    Points
    723
    Par défaut requête avec une jointure
    Bonjour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM rencontres INNER JOIN synchronisation WHERE (nom_locaux_rencontre LIKE nom_equipe OR nom_visiteurs_rencontre LIKE nom_equipe) AND synchronisation.num_equipe LIKE "520360"
    Me donne PJ1

    J'ai mis mes tables en pièces jointes

    Synchronisation PJ2

    Rencontres pj3

    J'ai sélectionné l'une des lignes que la requête ramène (1ère), mais il ne ramène pas la seconde. Je n'arrive pas à faire un concat, pour qu'il puisse ramener aussi la seconde (et aussi Vouillé 3 .. 4 etc etc)

    Merci pour votre aide
    Images attachées Images attachées    

  2. #2
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    1) Il vaut mieux éviter la guerre des étoiles !

    2) En SQL, les valeurs textuelles s'entourent d'apostrophes, pas de guillemets !

    3) L'utilisation d'alias pour les tables est fortement recommandé dès qu'il y a plus d'une table dans la requête. Cela facilite l'écriture et la lecture de celle-ci. Il faut ensuite utiliser systématiquement ces alias devant chaque colonne nommée pour savoir facilement de quelle table elle vient.

    4) Utiliser LIKE sans caractère générique revient à utiliser =

    5) Il manque la condition de jointure dans votre requête !

    6) Donnez la structure des tables et une meilleure explication de ce qu'est censée faire cette requête.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 81
    Points : 89
    Points
    89
    Par défaut
    Si je peux me permettre au niveau de votre première capture d'écran a priori je pense que si votre base est importante, vous auriez pas mal a gagner en créant une table de vos équipes et de seulement indiquer dans les champs 'nom_visiteurs-rencontre' et 'nom_locaux_rencontre' l'id de l'équipe a partir de la table équipe précédemment créée.

    Ca permet de n'avoir qu'une seule fois l'information d'où un gain énorme de place et d'allègement de la table pour les recherche puisque les recherches se feront sur un entier et les index devrait aussi s'alléger pas mal.

  4. #4
    Membre éclairé Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Points : 723
    Points
    723
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    1) Il vaut mieux éviter la guerre des étoiles !
    Pourtant, ce sont des très bon films ... Fait

    Citation Envoyé par CinePhil Voir le message
    2) En SQL, les valeurs textuelles s'entourent d'apostrophes, pas de guillemets !
    Fait
    Citation Envoyé par CinePhil Voir le message
    3) L'utilisation d'alias pour les tables est fortement recommandé dès qu'il y a plus d'une table dans la requête. Cela facilite l'écriture et la lecture de celle-ci. Il faut ensuite utiliser systématiquement ces alias devant chaque colonne nommée pour savoir facilement de quelle table elle vient.
    J'aime pas. Pas fait
    Citation Envoyé par CinePhil Voir le message
    4) Utiliser LIKE sans caractère générique revient à utiliser =
    Justement, je souhaiterai utiliser "%" pour que cela ramène toutes les rencontres(pj3) dont l'équipe (locaux ou visiteurs) commence par "Vouillé" (donc Vouillé 2) ayant pour numéro '520360' (pj2)
    Citation Envoyé par CinePhil Voir le message
    5) Il manque la condition de jointure dans votre requête !
    Citation Envoyé par CinePhil Voir le message
    6) Donnez la structure des tables et une meilleure explication de ce qu'est censée faire cette requête.
    Ramenez toutes les rencontres dont le rencontres.nom_locaux_rencontre ou le rencontres.nom_visiteurs_rencontre commence par synchronisation.nom_equipe et dont le synchronisation.num_equipe soit égale à 520360.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT date_rencontre,num_rencontre,terrain_rencontre,lieu_rencontre,ville_rencontre,distance_rencontre,nom_locaux_rencontre,nom_visiteurs_rencontre,niveau_rencontre,tour_rencontre,fonction_rencontre 
     
    FROM rencontres INNER JOIN synchronisation 
    ON
    (nom_locaux_rencontre LIKE nom_equipe OR nom_visiteurs_rencontre LIKE nom_equipe) WHERE synchronisation.num_equipe LIKE '520360'
    Citation Envoyé par everest31 Voir le message
    Si je peux me permettre au niveau de votre première capture d'écran a priori je pense que si votre base est importante, vous auriez pas mal a gagner en créant une table de vos équipes et de seulement indiquer dans les champs 'nom_visiteurs-rencontre' et 'nom_locaux_rencontre' l'id de l'équipe a partir de la table équipe précédemment créée.
    Impossible, car
    1. Pour une rencontre, la saisie se fait avec les noms d'équipes
    2. Il y a plusieurs équipes par ID


    Citation Envoyé par everest31 Voir le message
    Ca permet de n'avoir qu'une seule fois l'information d'où un gain énorme de place et d'allègement de la table pour les recherche puisque les recherches se feront sur un entier et les index devrait aussi s'alléger pas mal.
    Justement, dans ma table rencontres (voir post avec CinePhil), je cherche déjà à virer les num_locaux_rencontre et num_visiteurs_rencontre déjà présent dans la table synchronisation.num_equipe
    Images attachées Images attachées   

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 81
    Points : 89
    Points
    89
    Par défaut
    je me suis peut etre un peu perdu dans ta requete mais essaye ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT r.date_rencontre,r.num_rencontre,r.terrain_rencontre,r.lieu_rencontre,r.ville_rencontre,r.distance_rencontre,r.nom_locaux_rencontre,r.nom_visiteurs_rencontre,r.niveau_rencontre,r.tour_rencontre,r.fonction_rencontre 
     
    FROM rencontres AS r 
    INNER JOIN synchronisation AS s ON  s.num_equipe = 520360
     
    WHERE r.nom_locaux_rencontre LIKE s.nom_equipe OR r.nom_visiteurs_rencontre LIKE s.nom_equipe;
    Maintenant j'ai l'impression qu'entre ta table synchronisation et rencotnre, il y a quand meme redondance de données.

    Je pense que ca serait bien mieux d'avoir une table equipe avec un id par équipe et dans la table rencontre n'indexer que l'id de l'équipe en visiteur ou locaux.

    Ca faciliterait les recherches vu que tu ferais seulement des recherches sur des entiers, et ensuite derriere une jointure pour faire correspondre l'id de l'equipe au nom réel de l'equipe.

    parce qu'a mon avis (meme si je ne suis pas un expert bdd) faire en permanence des recherches sur du texte c'est beaucoup plus consommateur de ressource que sur des entiers

  6. #6
    Membre éclairé Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Points : 723
    Points
    723
    Par défaut
    Citation Envoyé par everest31 Voir le message
    je me suis peut etre un peu perdu dans ta requete mais essaye ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT r.date_rencontre,r.num_rencontre,r.terrain_rencontre,r.lieu_rencontre,r.ville_rencontre,r.distance_rencontre,r.nom_locaux_rencontre,r.nom_visiteurs_rencontre,r.niveau_rencontre,r.tour_rencontre,r.fonction_rencontre 
     
    FROM rencontres AS r 
    INNER JOIN synchronisation AS s ON  s.num_equipe = 520360
     
    WHERE r.nom_locaux_rencontre LIKE s.nom_equipe OR r.nom_visiteurs_rencontre LIKE s.nom_equipe;
    C'est gentil !, mais ça ne fonctionnerait pas non plus .

    Au final, je vais rajouter Vouillé 2 dans ma table synchro et comme celà, la requête fonctionnera parfaitement.

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

Discussions similaires

  1. Requête possible avec une jointure ?
    Par Djakisback dans le forum Langage SQL
    Réponses: 4
    Dernier message: 17/11/2011, 14h55
  2. [doctrine] Requête avec une jointure
    Par benhsaien dans le forum ORM
    Réponses: 4
    Dernier message: 28/03/2011, 16h14
  3. une requête avec deux jointures
    Par rinuom99 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 18/12/2009, 21h11
  4. Une requête avec des jointures externes
    Par Sopra dans le forum Langage SQL
    Réponses: 4
    Dernier message: 30/07/2009, 18h28
  5. Requête avec une jointure multitables
    Par thefleo dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/02/2009, 10h07

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