SQL : problème pour écrire une requête (un peu) complexe
muqaddar
Administrateur
Salut les gens,
J'en appelle aux cracks de MySQL.
Je n'arrive pas à avoir ce que je veux lors d'une requête.
Soit 5 tables : wines, countries, regions, stocks, wineships.
Il s'agit de récupérer le total des vins par région et la somme des stocks de chaque vin
+ 2 champs existants.
Voilà ma requête actuelle :
Ce qui me donne :
Bordeaux France.gif 1 11
Bourgogne France.gif 1 5
Lombardia Italy.gif 1 6
Si les stocks sont bons (dernière colonne), le total ne l'est pas.
Or, le total était bon lorsque je ne m'occupais pas de la somme des stocks...
Une idée ?
J'en appelle aux cracks de MySQL.
Je n'arrive pas à avoir ce que je veux lors d'une requête.
Soit 5 tables : wines, countries, regions, stocks, wineships.
Il s'agit de récupérer le total des vins par région et la somme des stocks de chaque vin
+ 2 champs existants.
Voilà ma requête actuelle :
SELECT r.name, c.flag, count(distinct w.id) AS total_wines, sum(s.instock) AS somme_stocks <br />FROM wines w, countries c, regions r, wineships ws, stocks s <br />WHERE ws.member_id = 1 <br />AND w.id = ws.wine_id <br />AND r.country_id = c.id <br />AND w.region_id = r.id <br />AND s.wine_id = w.id <br />GROUP BY w.region_id <br />ORDER BY total_wines DESC <br />LIMIT 10
Ce qui me donne :
Bordeaux France.gif 1 11
Bourgogne France.gif 1 5
Lombardia Italy.gif 1 6
Si les stocks sont bons (dernière colonne), le total ne l'est pas.
Or, le total était bon lorsque je ne m'occupais pas de la somme des stocks...
Une idée ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Et ça fonctionne très bien...
Nota : ici, tu limites ta requête aux commandes d'un client (celui d'ID 1) ; es-tu sûr que tu as plusieurs types de vins pour chaque région commandé par ce client ?
Il y a plusieurs vins par région mais je ne veux QUE les régions où le membre (client) a des vins.
J'ai besoin du GROUP BY pour ne pas dupliquer les régions...
Si tu pouvais juste nous montrer le contenu de tes tables (juste un extrait sur un client par ex), ca m'aiderait à t'aider :-)
Oui, je sais bien, mais c'était une requête test, pour voir si ça foire au niveau du "GROUP BY" ou avant :P
wines
- id
- region_id
wineships (jointure)
- wine_id
- member_id
stocks
- id
- wine_id
regions
- id
- country_id
members
- id
- lastname
countries
- id
- flag
Voilà si ça peut aider... merci les gars ! ;-)
ps : sans le group by, il manque une région... les résultats sont erronés.
Est-ce que sans le GROUP BY, tu vois bien plusieurs entrées par régions ?
Oui, je confirme.