Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

लिंक की गई सूची के लिए mysql क्वेरी

क्वेरी t_list . पर पुनरावृति करके काम करती है तालिका (अंतिम पंक्ति)। इस तालिका की प्रत्येक पंक्ति के लिए, SELECT . में उप-क्वेरी क्लॉज तालिका को फिर से पूछता है, वर्तमान पंक्ति के बच्चे की खोज करता है (WHERE parent = _parent -- लेकिन _parent @r . के लिए एक उपनाम है ) प्रत्येक पुनरावृत्ति पर, बच्चे की id @r . को असाइन किया गया है चर।

सीमाओं को जोड़ने के लिए, इस भिन्नता को चाल चलनी चाहिए:

SELECT * FROM (
    SELECT
        @r AS _parent,
        @r := (
            SELECT id
            FROM t_list
            WHERE
                ( @c = 0 AND _parent IS NULL AND parent IS NULL ) -- special case if the first item is the root
                OR (parent = _parent)
        ) AS id,
        @c := @c + 1 AS rank
    FROM (
        SELECT @c := 0, @r := parent FROM t_list WHERE id = @start
    ) AS ini,
    (
        SELECT id FROM t_list LIMIT @limit
    ) AS lim
) AS tmp WHERE id IS NOT NULL;

बदलें @start और @limit id . के साथ पहले आइटम का, और प्राप्त करने के लिए आइटम की अधिकतम संख्या, क्रमशः। कृपया यहां इसका परीक्षण करें

RDBMS के साथ ऐसी डेटा संरचना की मॉडलिंग करना शायद पूरी तरह से एक बुरा विचार है। क्यों न केवल "इंडेक्स" कॉलम का उपयोग करें? सूची प्राप्त करना तत्काल हो जाता है:

SELECT * FROM list ORDER BY index_column ASC;

हो सकता है कि आपकी सूची बार-बार बदलने के लिए बनी हो, लेकिन इस तरह की क्वेरीज़ काफी तेज़ होनी चाहिए जब तक कि सूची वास्तव में बड़ी न हो जाए:

-- insert an element at position X 
UPDATE list SET index_column = index_column +1 WHERE index_column > X ORDER BY index_column DESC;
INSERT INTO list VALUE (some_value, X);

-- delete an element at position X 
DELETE FROM list WHERE index_column = X;
UPDATE list SET index_column = index_column -1 WHERE index_column > X ORDER BY index_column ASC;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक ही सर्वर पर दो mysql डेटाबेस में क्वेरी करने का प्रदर्शन?

  2. MySQL विदेशी कुंजी जोड़ें

  3. क्या यह देखना संभव है कि किसी क्वेरी द्वारा कौन सा डेटा बदला गया था?

  4. mysql-कनेक्टर-अजगर 2.0.1-1 python-mysql.connector के साथ संघर्ष

  5. JQuery के माध्यम से AJAX का उपयोग करके MySQL परिणाम पोस्ट करें