यदि परिवर्तनों की संख्या कम है, तो आप एक अनाड़ी, बल्कि कुशल अद्यतन विवरण उत्पन्न कर सकते हैं यदि आप शामिल वस्तुओं की आईडी जानते हैं:
UPDATE categories
JOIN (
SELECT 2 as categoryID, 3 as new_order
UNION ALL
SELECT 3 as categoryID, 4 as new_order
UNION ALL
SELECT 4 as categoryID, 2 as new_order) orders
USING (categoryId)
SET `order` = new_order;
या (जो मुझे कम पसंद है):
UPDATE categories
SET `order` = ELT (FIND_IN_SET (categoryID, '2,3,4'),
3, 4, 2)
WHERE categoryID in (2,3,4);
यूपीडी :
यह मानते हुए कि आप श्रेणी की वर्तमान आईडी (या उसका नाम), उसकी पुरानी स्थिति और उसकी नई स्थिति जानते हैं, आप किसी श्रेणी को सूची में नीचे ले जाने के लिए निम्न क्वेरी का उपयोग कर सकते हैं (ऊपर जाने के लिए आपको between
शर्त और new_rank
rank+1
. की गणना ):
SET @id:=2, @cur_rank:=2, @new_rank:=4;
UPDATE t1
JOIN (
SELECT categoryID, (rank - 1) as new_rank
FROM t1
WHERE rank between @cur_rank + 1 AND @new_rank
UNION ALL
SELECT @id as categoryID, @new_rank as new_rank
) as r
USING (categoryID)
SET rank = new_rank;