Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/05/2011, 18h54   #1
Invité régulier
 
Inscription : février 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 13
Points : 5
Points : 5
Par défaut Probleme condition de jointure "min"

Bonjour à tous

voici mon problème

Pour faire simple, je vend au détail des livres proposés par des fournisseurs.

J'ai donc une table livre, une fournisseur et une prix

livre a 2 colonnes : id, titre
fournisseur a 2 colonnes : id, nom
prix a 4 colonnes: id, prix, livre_id, fournisseur_id,

je voudrais que ma requete retourne pour tous mes livres le prix minimum ainsi que le fournisseur correspondant à ce prix soit un truc du genre

livre id | livre titre | prix | fournisseur_id
--- 1 --- da vinci -- 33 ---- 7
--- 2 --- la marq ---12 ---- 4
--- 3 --- indignez -- 50 ---- 1
...

voici mon code :

Code :
1
2
3
4
5
6
7
SELECT L.id , L.titre , p.prix , p.fournisseur_id
FROM livre L
LEFT JOIN prix p ON (p.livre_id = L.id AND (p.prix = 
         (SELECT MIN(prix)
          FROM prix
          WHERE prix.livre_id = L.id))
GROUP BY L.id
Ce code me renvoie NULL pour les colonnes p.prix et p.fournisseur_id tout le temps SAUF pour le livre qui a effectivement le prix minimum dans l'absolu.

quelqu'un pourrait il m'aider à me dépatouiller?

Merci beaucoup
Mattyman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 15h35   #2
Membre habitué
 
Avatar de bbl22
 
Inscription : février 2009
Messages : 114
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 114
Points : 112
Points : 112
Essaie:

Code :
1
2
3
4
5
6
7
8
9
 
SELECT L.id , L.titre , MIN(p.prix) AS prix_min , f.nom
FROM livre L
LEFT JOIN prix p 
ON p.id = L.id_prix
LEFT JOIN fournisseur f
ON p.fournisseur_id = f.id
 
GROUP BY L.id , L.titre , f.nom
__________________
bbl MeMa
bbl22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 16h41   #3
Invité régulier
 
Inscription : février 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 13
Points : 5
Points : 5
"L.id_prix" n'existe pas dans mon modele. (et je ne veux surtout pas qu'il existe, dans le concept, un livre ne doit pas avoir de prix. C'est le prix qui n'a pas de sens sans l'article. donc c'est le prix qui doit avoir un livre_id et pas le contraire si?)

et surtout j'ai besoin de renseignements de la même table. en fait ce que je veux c'est retrouver le fournisseur_id (ou un autre champ, n'importe lequel comme p.devise par exemple)

la table fournisseur m'importe peu à vrai dire.

En fait je veux joindre la table "prix" à ma table "livre" uniquement avec les enregistrements de prix mini.

autrement dit passer de ca :

T1, COND De JOINT , T2

L1, P1.livre_id = L1.id, P1.id, P1.prix, P1.devise , P1.fournisseur_id
L1, P2.livre_id = L1.id, P2.id, P2.prix, P2.devise , P2.fournisseur_id
L1, P3.livre_id = L1.id, P3.id, P3.prix, P3.devise , P3.fournisseur_id

L2, P4.livre_id = L2.id, P4.id, P4.prix, P4.devise , P4.fournisseur_id
L2, P5.livre_id = L2.id, P5.id, P5.prix, P5.devise , P5.fournisseur_id
L2, P6.livre_id = L2.id, P6.id, P6.prix, P6.devise , P6.fournisseur_id

L3, P7.livre_id = L3.id, P7.id, P7.prix, P4.devise , P7.fournisseur_id
L3, P8.livre_id = L3.id, P8.id, P8.prix, P5.devise , P8.fournisseur_id

L4, P9.livre_id = L4.id, P9.id, P9.prix, P6.devise , P9.fournisseur_id

soit
Code :
SELECT ... FROM livre L LEFT JOIN prix P ON P.livre_id=L.id
à ca :

T1 COND De JOINT T2

L1, P2.livre_id = L1.id, P2.id, P2.prix, P2.devise , P2.fournisseur_id (parce que P2 est le minimum entre P1 P2 et P3)

L2, P6.livre_id = L2.id, P6.id, P6.prix, P6.devise , P6.fournisseur_id (parce que P6 est le minimum entre P4 P5 et P6)

L3, P8.livre_id = L3.id, P8.id, P8.prix, P5.devise , P8.fournisseur_id (parce que P8 est le minimum entre P7 et P8)

L4, P9.livre_id = L4.id, P9.id, P9.prix, P6.devise , P9.fournisseur_id (parce que P9 est tout seul donc minimum)

j'espère être le plus clair possible mais ca n'est jamais évident d'expliquer le problème...

Merci
Mattyman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 20h25   #4
Invité régulier
 
Inscription : février 2011
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 13
Points : 5
Points : 5
ok probleme résolu !

en fait ma première requête était bonne mais je ne sais pas pourquoi mes données chargées automatiquement (symfony) ne sont pas prises en compte...

d'ailleurs si quelqu'un savait pourquoi ... en attendant, problème résolu !!
Mattyman est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h42.


 
 
 
 
Partenaires

Hébergement Web