Problème dans mon where... - SQL/NoSQL - Programmation
Marsh Posté le 19-07-2013 à 17:47:00
Bonjour !
Je pense que votre where est mal placé car vous exécutez d'abord la clause where, ce qui vous renvoie donc les deux dates de 2013 pour les id_produit 1 et 3, puis ensuite votre max.
Si vous remplacez le YEAR(produits_vente.date_) par YEAR(last_vente), cela marche ? (Je n'ai pas de serveur sous la main pour tester).
Sinon, faites une sous-requête qui ne vois renvoie que les id_produits dont la dernière vente est en 2013, puis faites un produits.id_produits in (la requête) au lieu de faire une jointure (mais j'ai du mal à estimer la charge que cela va entraîner).
Bonne continuation !
Marsh Posté le 19-07-2013 à 18:08:45
Merci Farian,
Si je remplace le YEAR(produits_vente.date_) par YEAR(last_vente) ca ne fonctionne pas. Pour être sûr: YEAR(MAX(produits_vente.date_)) non plus.
Le problème est que j'ai besoin de ma jointure avec LEFT car il peut ne pas y avoir de date_ correspondante dans la table...
A moins que je n'aie pas bien compris la sous-requête dont vous me parlez...
Il n'y a alors pas de solution possible?
Marsh Posté le 19-07-2013 à 19:02:07
Je n'arrive pas à écrire la sous requête. Pourriez vous me donner une piste svp.
Marsh Posté le 19-07-2013 à 20:18:07
Je n'ai rien pour tester la requête, mais j'aurais remplacé la jointure sur la table par un "where produits.id_produit in (select id_produit from id_produits_vente where YEAR(MAX(produits_vente)) = '2013')
Mais en l'écrivant, je ne suis pas sûr que cela marche ... Mais c'est l'idée ...
Je laisse la main aux vrais experts du SQL
Marsh Posté le 20-07-2013 à 11:40:36
Farian a écrit : Je n'ai rien pour tester la requête, mais j'aurais remplacé la jointure sur la table par un "where produits.id_produit in (select id_produit from id_produits_vente where YEAR(MAX(produits_vente)) = '2013') |
Au secours les gars, ça ne fonctionne pas. Je désespère.
Voilà ce que j'ai fait:
Code :
|
Merci d'avance pour votre aide si précieuse...
Marsh Posté le 21-07-2013 à 23:20:31
utilise un HAVING(MAX(xxx)) à la place du where
Code :
|
Marsh Posté le 22-07-2013 à 23:16:51
deliriumtremens, tu es mon sauveur!
Un immense merci.
J'avais bien testé ça avant, mais j'avais placé le HAVING avant le GROUP BY, et là, rien ne fonctionne.
Merci merci merci!!!
Marsh Posté le 19-07-2013 à 17:13:29
Bonjour à tous,
Je suis vraiment bloqué sur la requête $sql que voici:
Voici la table "produits_vente":
id_produits_vente date_ id_produit
1 2014-04-03 1
2 2013-08-05 3
3 2012-09-04 2
4 2012-10-01 2
5 2013-08-06 1
Le problème est que ma requête $sql va bien rechercher les produits et dates de 2013, mais je voudrais que , pour chaque id_produit, sortent uniquement les dates de 2013, pour autant qu'il n'y ait pas de date supérieure. Or ici, pour l'id_produit 1, il y en a une en 2014. Donc seule la date du 2013-08-05 devrait sortir pour l'article 3, mais celle du 2013-08-06 sort également pour l'article 1.
Comment puis-je éviter ça?
merci d'avance!!!!!!!