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

Langage SQL Discussion :

Requête avec jointure


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 25
    Points : 24
    Points
    24
    Par défaut Requête avec jointure
    Bonsoir a tous,

    J'ai une requette avec jointure qui me permet de récupéré sur la bdd toute les randos enregistré correspondant a un :

    - Intervalle de date
    - Une activité
    - Un périmètre de recherche

    Pour le moment je récupère juste le ID (FicheRandonnee.CodeRandonnee) correspondant au différentes rando déjà enregistré, maintenant je souhaite récupérer l'ensemble des informations des tables FicheRandonnee, ConfigRando
    en fonction de l'id retourné, donc je pourrait effectué de nouvelle requettes mais je me demandé si je ne pouvait pas le faire directement en une seule requette.
    J'ai déjà essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM  Participer, Utilisateur, Pratiquer, Activiter, FicheRandonnee, ConfigRando...
    mais je me retrouve avec des doublons...

    Si quelqu'un peut m'expliqué comment je pourrai faire !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            $formule = "6366*acos(cos(radians('$latitude'))*cos(radians(FicheRandonnee.Latitude))*cos(radians(FicheRandonnee.Longitude)-radians('$longitude'))+sin(radians('$latitude'))*sin(radians(FicheRandonnee.Latitude)))";
     
            SELECT DISTINCT FicheRandonnee.CodeRandonnee FROM  Participer, Utilisateur, Pratiquer, Activiter, FicheRandonnee, ConfigRando
            WHERE Participer.DateRando BETWEEN '$date' AND '$dateIntervall'
            and Activiter.CodeActivite = '$id_activite'
            and $formule<='$distance'
            and Participer.CodeUtilisateur = Utilisateur.CodeUtilisateur
            and Utilisateur.CodeUtilisateur = Pratiquer.CodeUtilisateur
            and Pratiquer.CodeActivite = Activiter.CodeActivite
            and Activiter.CodeActivite = FicheRandonnee.CodeActivite
            and FicheRandonnee.CodeRandonnee = ConfigRando.CodeRandonnee;
    Merci

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 25
    Points : 24
    Points
    24
    Par défaut
    Ok j'ai trouvé le problème, dans mes jointures 'Table Participer' je n'utiliser pas la bonne cle, j'en n'ai profité pour refaire la requette avec INNER JOIN beaucoup plus lisible...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT * 
    FROM ConfigRando
    INNER JOIN FicheRandonnee ON ConfigRando.CodeConfigRando = FicheRandonnee.CodeRandonnee
    INNER JOIN Activiter ON FicheRandonnee.CodeActivite = Activiter.CodeActivite
    INNER JOIN Pratiquer ON Activiter.CodeActivite = Pratiquer.CodeActivite
    INNER JOIN Utilisateur ON Pratiquer.CodeUtilisateur = Utilisateur.CodeUtilisateur
    INNER JOIN Participer ON Utilisateur.CodeUtilisateur = Participer.CodeRandonnee
     
     
    WHERE Activiter.CodeActivite = 1
    and Participer.DateRando BETWEEN '2019-02-20' AND '2019-02-26'
    and 6366*acos(cos(radians(43.2329))*cos(radians(FicheRandonnee.Latitude))*cos(radians(FicheRandonnee.Longitude)-radians(0.0781021))+sin(radians(43.2329))*sin(radians(FicheRandonnee.Latitude)))<=30

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 380
    Points : 39 862
    Points
    39 862
    Billets dans le blog
    9
    Par défaut
    bonjour,

    Vous êtes passés d'une requête basée sur un produit cartésien (aucune jointure décrite) à des jointures écrites à l'ancienne et enfin à des jointures normées en très peu de temps, bravo, belle progression !

    Un question : fonctionnellement, ça veut dire quoi ce filtre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    6366*acos(cos(radians(43.2329))*cos(radians(FicheRandonnee.Latitude))*cos(radians(FicheRandonnee.Longitude)-radians(0.0781021))+sin(radians(43.2329))*sin(radians(FicheRandonnee.Latitude)))<=30
    Et une remarque : si vous pouvez le faire, corrigez le nom des tables. "Activiter" ca pique les yeux

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

Discussions similaires

  1. Requête avec jointure
    Par Maglight dans le forum Langage SQL
    Réponses: 4
    Dernier message: 17/11/2005, 10h57
  2. optimisation d'une requête avec jointure
    Par champijulie dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 07/07/2005, 10h45
  3. Requête avec jointures
    Par Corben dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/11/2004, 13h55
  4. Mise à jour de table impossible après requête avec jointure
    Par sto dans le forum Bases de données
    Réponses: 5
    Dernier message: 17/03/2004, 14h24
  5. problème de requête avec jointures
    Par tinhat dans le forum Requêtes
    Réponses: 7
    Dernier message: 11/08/2003, 11h33

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