UPDATE un poil complexe, avec rupture et incrémentation
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:
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:
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:
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.