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`

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
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 :
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

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
Voili, voulou ... Avez vous des conseils pour moi ? :'(