Bonsoir à tous,
Pourriez vous m'aider pour la requête ci-dessous ?
Pour faire simple, j'ai des paniers contenant des objets (A,B,C,D...)
Je souhaite trouver les panier qui contiennent
#1# A et/ou B en quantité de 10
ET #2# C et/ou D en quantité de 5
J'arrive à trouver sans problème la réponse aux requêtes #1# & #2# (cf. ci-dessous) mais pour coupler les deux de manière "optimisée" c'est plus compliquée
`contenu_panier` -> table listant le contenu des paniers
`contenu_panier`.`panier_id` > id des paniers
`contenu_panier`.`objet_id` > id de l'objet
`contenu_panier`.`quantite` > nombre d'objet n°`contenu_panier`.`objet_id dans le panier n°`contenu_panier`.`panier_id`
J'ai bien pensé à faire un truc comme ci-dessous #3# & #4# mais je ne pense pas que ce soit très optimisé cela risque de ce compliquer lorsque j'aurais des demandes comme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 #1# SELECT `contenu_panier`.`panier_id`,SUM(`contenu_panier`.`quantite`) AS somme FROM `contenu_panier` WHERE `contenu_panier`.`objet_id` IN ('A','B') GROUP BY `contenu_panier`.`panier_id` HAVING somme <10 #2# SELECT `contenu_panier`.`panier_id`,SUM(`contenu_panier`.`quantite`) AS somme FROM `contenu_panier` WHERE `contenu_panier`.`objet_id` IN ('C','D') GROUP BY `contenu_panier`.`panier_id` HAVING somme <5
A et/ou B en quantité de 10
ET C et/ou D en quantité de 5
ET Z et/ou W en quantité de 2
Voili, voulou ... Avez vous des conseils pour moi ? :'(
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 #3# SELECT S2.`panier_id`,SUM(S2.`quantite`) AS somme FROM ( SELECT `contenu_panier`.`panier_id`,SUM(`contenu_panier`.`quantite`) AS somme FROM `contenu_panier` WHERE `contenu_panier`.`objet_id` IN ('A','B') GROUP BY `contenu_panier`.`panier_id` HAVING somme <10 ) S1 JOIN `contenu_panier` S2 ON S2.`panier_id` = S1.`panier_id` WHERE S2.`objet_id` IN ('C','D') GROUP BY S2.`panier_id` HAVING S2.somme <5 #4# SELECT `contenu_panier`.`panier_id`,SUM(`contenu_panier`.`quantite`) AS somme FROM `contenu_panier` WHERE `contenu_panier`.`objet_id` IN ('C','D') AND `contenu_panier`.`panier_id` IN ( SELECT `contenu_panier`.`panier_id` FROM `contenu_panier` WHERE `contenu_panier`.`objet_id` IN ('A','B') GROUP BY `contenu_panier`.`panier_id` HAVING SUM(`contenu_panier`.`quantite`) <10 ) GROUP BY `contenu_panier`.`panier_id` HAVING somme <5
Partager