Bonjour à tous,
je fais face à un souci au niveau d'une de mes requêtes
Voilà un exemple type exposant mon problème:
Je dispose de 3 tables sql sur lesquelles j'effectue une jointure:
Table amis (membre_id,ami_id) 1 membre-plusieurs amis,
Table membre_produits(membre_id,produit_id) 1 membre-plusieurs produits,
Table produit(produit_id,categorie,dispo)
Mon objectif est d'obtenir le dernier produit enregistré (son id et sa catégorie) par chacun de mes amis (donc une seule ligne / ami ) et qui est dispo (=1) (en réalité je fait un LIMIT 5 pour n'obtenir qu'un échantillon d'ami)
Dans mon raisonnement (sans utiliser le LIMIT), j'ai d'abord cherché à obtenir tout les produits enregistrés de mes amis et qui sont dispos
Voilà ma requête:
=> SELECT A.ami_id,B.produit_id,C.categorie FROM amis A JOIN membre_produits B ON (A.ami_id=B.membre_id AND A.membre_id='mon_id') JOIN produit C ON (B.produit_id=C.produit_id) WHERE C.dispo='1'
1) Trouvez-vous cette requête correcte ? Pour ma part, elle me renvoie comme résultat ce que j'en attend.
A partir de là, j'ai cherché à obtenir seulement un produit unique par ami (toujours sans me soucier du LIMIT)
Voilà la requête que j'utilise à cet effet:
=> SELECT max(B.produit_id),B.membre_id,C.categorie,C.produit_id FROM membre_produits B JOIN amis A ON (A.ami_id=B.membre_id AND A.membre_id='mon_id') JOIN produit C ON (B.produit_id=C.produit_id) WHERE C.dispo='1' GROUP BY B.membre_id
2) Là aussi que pensez-vous de cette requête ?
Elle me renvoie bien 1 seule ligne par ami et l'id max des produits d'un ami, mais les autres infos ne correspondent pas à celle de l'id_max mais
au premier produit enregistré dans la table alors que je cherche à avoir le dernier !
Sachant qu'un membre effectue cette requête de temps en temps, il obtient quoiqu'il arrive les mêmes résultats peu importe si de nouveaux produits ont été ajoutés par un de ses amis.
Avez-vous des idées, des directions, des suggestions à me proposer ?
NB: j'ai mis de côté DISTINCT car il me semble que je ne peux l'utiliser sur une seule des colonnes d'une table
En l'attente de vos réponses,
merci d'avance.
Signé Sagat