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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Probème de requête avec jointure externe

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probème de requête avec jointure externe

n°1680544
dridri
Thérèse n'est pas moche...
Posté le 01-02-2008 à 15:58:40  profilanswer
 

Je m'explique :
 
Je cherche à gérer des statistiques de visites de petites annonces, en fonction du mois de visite et de la provenance du visiteur (index, moteur de recherche interne, accès depuis l'extérieur/google). Ainsi à chaque visite, le compteur correspondant à la visite augmente de 1.
 
Structure de mes tables :
 
annonces
id
#id_auteur (clé étrangère provenant de la table des auteurs)
titre
...
 
stats
id
#id_annonce (clé étrangère provenant de la table statistiques)
mois
index
recherche
exterieur
 
Problème : je veux lister les statistiques du mois en cours (disons 200802) pour les annonces d'un auteur donné (disons 65)
Requête :
 

Code :
  1. SELECT annonces.id, annonces.titre, stats.INDEX, stats.recherche, stats.exterieur
  2. FROM annonces
  3. LEFT JOIN stats
  4. ON annonces.id = stats.id_annonce
  5. WHERE annonce.id_auteur = 65
  6. AND stats.mois = 200802


 
Le souci, c'est que je ne récupère que les annonces de l'auteur 65 qui ont été visitées en février 2008 alors que je souhaite la liste complète des annonces, même si aucune ligne ne statistique n'existe. Je croyais que c'était justement le but de la jointure externe...


Message édité par dridri le 01-02-2008 à 16:32:04

---------------
Feed-back HA/Ventes HFR | http://www.nexen.org Lans dans le nord de la France
mood
Publicité
Posté le 01-02-2008 à 15:58:40  profilanswer
 

n°1680556
anapajari
s/travail/glanding on hfr/gs;
Posté le 01-02-2008 à 16:13:33  profilanswer
 

Code :
  1. ON annonces.id = stats.id_annonce
  2. WHERE annonce.id_auteur = 65
  3. AND stats.mois = 200802


à remplacer par

Code :
  1. ON annonces.id = stats.id_annonce AND stats.mois = 200802
  2. WHERE annonce.id_auteur = 65


en rajoutant une clause dans le where pour ta table stats, tu transformes ta jointure en jointure interne.
Perso je préfère la solution donné avec double condition dans le on mais tu pouvais aussi ecrire

Code :
  1. WHERE annonce.id_auteur = 65
  2. AND (stats.mois = 200802 OR stats.mois = NULL)



---------------
Software and cathedrals are much the same - first we build them, then we pray.
n°1680574
ZeBix
edit > preview
Posté le 01-02-2008 à 16:35:34  profilanswer
 

Je ne sais pas quel système SQL tu utilises, mais je me demande si par défaut, un join n'est pas INNER ... ?
 
Tu as essayé avec LEFT OUTER JOIN à la place de LEFT JOIN ?

n°1680575
dridri
Thérèse n'est pas moche...
Posté le 01-02-2008 à 16:35:46  profilanswer
 

la 1ere solution fonctionne parfaitement, merci.  :jap:  
la 2nde non, car dans le cas où il existe des statistiques pour le mois 200801, la ligne n'est pas renvoyée.
 

ZeBix a écrit :

Je ne sais pas quel système SQL tu utilises, mais je me demande si par défaut, un join n'est pas INNER ... ?


access


Message édité par dridri le 01-02-2008 à 16:36:40

---------------
Feed-back HA/Ventes HFR | http://www.nexen.org Lans dans le nord de la France

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

  Probème de requête avec jointure externe

 

Sujets relatifs
Requête à un serveur httpsRequête complexe
impression du resultat d'une requete[mysql] Requete avec moyenne avg
[Résolu] Aide requête SQL: item n'appartenant pas à une catégorie[PHP] affichage requete ODBC dans un tableau
Requête SQL + Opération sur TimestampEnvoi de requête grâce à un select
requete group by, countSavoir si un résultat de requête est vide
Plus de sujets relatifs à : Probème de requête avec jointure externe


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