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 :

[DEBUTANT] Besoin d'aide sur une requête Mysql


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 12
    Points : 11
    Points
    11
    Par défaut [DEBUTANT] Besoin d'aide sur une requête Mysql
    Bonjour les Requeteurs...

    Alors j'ai un petit probleme pour ecrire une requete et je suis Ultra-Debutant.

    Ce sont des requetes Mysql.

    Je m'explique, j'ai 3 tables ayant un champ commun que nous appellerons IDsiteinternet.

    1ere table: tout les sites internet. (idsiteinternet , siteinternet)
    2eme table: Sites internet exclus. (idsiteinternet)
    3eme table: site internet visité dans une periode. (idsiteinternet, periode)

    donc je cherche a faire une requete me donnant tout les sites internet visités durant une periode et retirer toutes les resultats dont l'idsiteinternet se trouve dans les sites exclus.

    Moi j'ai fait ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT sitesinternet.idsiteinternet, periode
    FROM sitesinternet, sitesexlus, sitesvisites
    WHERE (sitesvisites.periode = "periode")
    AND (sitesinternet.idsiteinternet = sitesvisites.idsiteinternet)
    AND (sitesexlus.idsiteinternet != sitesvisites.idsiteinternet)
    Alors premierement ca multiplie le resultats par le nombre de fois que j'ai de sitesexclus, donc j'ai tenté de pallier à ça en ajoutant " GROUP BY sitesinternet.idsiteinternet"
    Et ensuite les sites exclus sont quand même dans les résultat donc je ne sais surement pas faire correctement la requête. HEELP.

    Merci d'avance.

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    salut,


    essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT sitesinternet.idsiteinternet, periode
    FROM sitesinternet
    JOIN sitesvisites on sitesinternet.idsiteinternet = sitesvisites.idsiteinternet
    LEFT JOIN sitesexlus on sitesexlus.idsiteinternet = sitesvisites.idsiteinternet
    WHERE sitesvisites.periode = "periode"
    AND sitesexlus.idsiteinternet is null

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Alors là, ENORME ça marche parfaitement.

    Par contre juste une petite chose pour ma formation personnelle.

    Pourrais tu m'expliquer ta requête ligne par ligne s'il te plait, surtout les

    JOIN, LEFT JOIN et IS NULL

    Encore Merci!

  4. #4
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 324
    Points
    4 324
    Par défaut
    Bonjour,

    Considérons la jointure suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT champs
    FROM laTable1, laTable2
    WHERE laTable1.id, laTable2.idTable1 #critère de jointure
    MySQL va tout d'abord réaliser un produit cartésien des deux ensembles puis faire une restriction dessus pour garder exactement l'égalité décrite dans le WHERE. Ceci implique que pour qu'un enregistrement soit retourné, il faut que le critère de jointure soit présent à la fois dans le premier et dans le second ensemble.

    A la sortie de SQL2, une normalisation des jointure a été établie pour effectuer la même chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT champs
    FROM laTable1
    [INNER] JOIN laTable2
    ON laTable1.id, laTable2.idTable1
    Dans le cas ou l'on souhaite garder la totalité d'un des deux ensembles et en effectuant les jointures quand c'est possible, on utilise les jointures externes. Supposons que nous souhaitons garder tout les enregistrement de laTable1, la requête serait celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT champs
    FROM laTable1
    LEFT JOIN laTable2
    ON laTable1.id, laTable2.idTable1
    Je pense que la lecture de cet article t'aiderais à approfondir.

    PS : n'oublie pas le résolu ^^

Discussions similaires

  1. [SQL] Besoin d'aide sur une requête
    Par moonboot dans le forum Oracle
    Réponses: 1
    Dernier message: 01/08/2006, 15h56
  2. besoin d'aide sur une requête mysql
    Par unmulot dans le forum Langage SQL
    Réponses: 5
    Dernier message: 07/07/2006, 13h17
  3. [SQL] Besoin d'aide sur une requête
    Par Angath dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/01/2006, 16h26
  4. Réponses: 1
    Dernier message: 03/08/2005, 11h41
  5. Besoin d'aide sur une requête (JOIN + COUNT ?)
    Par PanzerKunst dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/06/2005, 10h29

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