Probème de requête avec jointure externe

Probème de requête avec jointure externe - SQL/NoSQL - Programmation

Marsh Posté le 01-02-2008 à 15:58:40    

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
Reply

Marsh Posté le 01-02-2008 à 15:58:40   

Reply

Marsh Posté le 01-02-2008 à 16:13:33    

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.
Reply

Marsh Posté le 01-02-2008 à 16:35:34    

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 ?

Reply

Marsh Posté le 01-02-2008 à 16:35:46    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed