Bonjour tout le monde,

Ça fait longtemps que je n'ai pas fait de SQL, et la je sèche méchant sur un update.

En lecture, j'ai 2 tables. La 1° contient des produits et leur quantité, la seconde elle contient leur placement dans une liste.

Je fais donc ceci pour l'affichage :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
SELECT cat.`id_category`, cat.`position`, pr.`id_product`, pr.`quantity`
FROM `ps_product` pr
LEFT JOIN `ps_category_product` cat ON cat.id_product = pr.id_product
ORDER BY cat.`id_category`, pr.`quantity`
Résultat :

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
 
id_category ;position ;id_product ;quantity
1 	;1 	;2 	;100
1 	;3 	;7 	;180
1 	;2 	;6 	;249
1 	;4 	;5 	;274
1 	;0 	;1 	;800
1 	;3 	;8 	;5001
2 	;0 	;2 	;100
2 	;1 	;7 	;180
2 	;1 	;1 	;800
3 	;0 	;9 	;1
3 	;0 	;8 	;5001
4 	;0 	;6 	;249
4 	;0 	;5 	;274
C'est nickel chrome.

Maintenant, ça devient chaud pour moi.

Je dois réorganiser l'ordre des produits en fonction de leur quantité. Les règles du jeu :
  • Un produit peut être dans plusieurs catégories (id_category ).
  • A chaque changement de catégorie, le premier produit doit avoir position à 1. Les suivants sont incrémentés de 1.
  • L'ordre des produits dans chaque catégorie se fait par leur quantité.


Je souhaite donc faire un UPDATE pour obtenir ceci :

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
id_category ;position ;id_product ;quantity
1 	;1 	;2 	;100
1 	;2 	;7 	;180
1 	;3 	;6 	;249
1 	;4 	;5 	;274
1 	;5 	;1 	;800
1 	;6 	;8 	;5001

2 	;1 	;2 	;100
2 	;2 	;7 	;180
2 	;3 	;1 	;800

3 	;1 	;9 	;1
3 	;2 	;8 	;5001

4 	;1 	;6 	;249
4 	;2 	;5 	;274
Et la, c'est le drame, je sèche comme une vieille bouse. Impossible (pour moi) de gérer la rupture sur id_category.

Sauf a scripter une moulinette toute dégueulasse avec des updates en boucle.

Quelqu'un aurait-il une solution, ou un début de piste ?

Merciiiiiii.