2011-02-11 3 views
7

क्या एक सूची को सॉर्ट करना और ऑर्डर को एक ही अपडेट में सहेजना संभव है?MySQL - एकल अपडेट के साथ सूची क्रम सहेजें

मैं इस तरह से करने की कोशिश की:

UPDATE `jos_vm_category`,(SELECT @row:=0) AS init SET @row:[email protected]+1, [email protected] ORDER BY `category_name` ASC 

लेकिन एक त्रुटि मिली: इस से

category_id | category_name | list_order 
    3  |  A  |  1 
    1  |  B  |  2 
    2  |  C  |  3 

:

1221 - Incorrect usage of UPDATE and ORDER BY

तो यह स्पष्ट नहीं है, मैं इस की जरूरत है

category_id | category_name | list_order 
    1  |  B  |  1 
    2  |  C  |  2 
    3  |  A  |  3 

एक ही अद्यतन के साथ।

तो list_order तालिका का एक क्षेत्र है जहां मुझे पंक्तियों का क्रम सहेजना है। (मैं पहले से ही समाधान है, लेकिन 2 दिनों के लिए इंतजार करना पड़ता है, तो मैं तो प्रकाशित करेंगे, तो कोई भी सवाल का जवाब।)

उत्तर

9

MySql एकाधिक तालिका अद्यतन के साथ ORDER BY परमिट नहीं करता है। Docs

आप इसके बजाय किसी उप क्वेरी का उपयोग कर सकते हैं:

UPDATE jos_vm_category c 
    JOIN (
     SELECT category_id, (@row:[email protected]+1) rowNum 
     FROM jos_vm_category, (SELECT @row:=0) dm 
     ORDER BY category_name 
    ) rs ON c.category_id = rs.category_id 
SET c.list_order = rs.rowNum 

वैकल्पिक रूप से, आप उन्हें 2 प्रश्नों में विभाजित कर सकते हैं:

SELECT @row:=0; 
UPDATE jos_vm_category 
SET list_order = (@row:[email protected]+1) 
ORDER BY category_name; 
+2

मुझे पता है कि यह है पुराना लेकिन आपके द्वारा पोस्ट किया गया अद्यतन कथन पोस्ट किया जाने वाला सबसे बड़ा SQL कथन है। यह वही था जो मैं खोजने के लिए आधे साल की तलाश में था। धन्यवाद! – woolyninja

0

मुझे लगता है कि यह आपके लिए क्या देख रहे है:

ALTER TABLE `jos_vm_category` ORDER BY `category_name`; 
+0

नहीं वास्तव में, मैं आदेश दिया सूची की पंक्ति संख्या की जरूरत है। – inf3rno

+0

SQL फ़ंक्शन 'ROW_NUMBER() 'में बनाया गया है। क्या आप '@ row' के बजाय क्या खोज रहे हैं? [http://www.openwinforms.com/row_number_to_sql_select.html ](http://www.openwinforms.com/row_number_to_sql_select.html) – Eli

+0

MySQL विंडोिंग फ़ंक्शंस का समर्थन नहीं करता है, इसलिए row_number() का उपयोग नहीं किया जा सकता –

संबंधित मुद्दे