MySQL - MySQL का यह संस्करण अभी तक 'LIMIT & IN / ALL / any / SOME सबक्वेरी का समर्थन नहीं करता है


95

यह वह कोड है जो im उपयोग कर रहा है

    $Last_Video         = $db->fetch_all('
    SELECT VID, thumb
    FROM video
    WHERE VID IN (
        SELECT VID
        FROM video
        WHERE title LIKE "%'.$Channel['name'].'%"
        ORDER BY viewtime DESC
        LIMIT 5)
    ORDER BY RAND()
    LIMIT 1
');

यह वह त्रुटि है जो मुझे देती है

 Message:   Error during SQL execution: SELECT VID, thumb FROM video WHERE VID IN ( SELECT VID FROM video WHERE title LIKE "%funny%" ORDER BY viewtime DESC LIMIT 5) ORDER BY RAND() LIMIT 1<br />
 MySQL Error:   This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'<br />
MySQL Errno:    1235

मैं इस समस्या को कैसे ठीक कर सकता हूं? इसका दूसरा तरीका इसे बनाने के लिए ... तो मैं त्रुटि नहीं ...


मैं इस लोल को कैसे ठीक कर सकता हूं ... या मैं इसे कैसे काम कर सकता हूं ...
मिहाई विटेजु

MySQL के एक संस्करण का उपयोग करें जो इसका समर्थन करता है?
पॉल डेज़र्ट

क्या आप कृपया पूरे कोड की आपूर्ति कर सकते हैं। उदाहरण के लिए $ db कैसे सेट किया जाता है?
बेस्टप्रोग्राममेरिन्थवर्ल्ड

5.1.59 यह वह संस्करण है जो मैं उपयोग करता हूं
Mihai Viteazu

3
फिर भी 5.7.11 के साथ मामला
गामोव

जवाबों:


162

IN का उपयोग करने के बजाय, आप JOIN का उपयोग कर सकते हैं

SELECT v.VID, v.thumb
FROM video AS v
INNER JOIN
     (SELECT VID
     FROM video
     WHERE title LIKE "%'.$Channel['name'].'%"
     ORDER BY viewtime DESC
     LIMIT 5) as v2
  ON v.VID = v2.VID
ORDER BY RAND()
LIMIT 1

मैं इस कोड की कोशिश करता हूं और सही काम करता हूं ... यह तरीका है कि मैं इसका उपयोग कैसे करता हूं $ Last_Video = $ db-> fetch_all ('SELECT v.VID, v.thumb FROM video AS v INNER JOIN (सेलेक्ट वीआईडी ​​वीडियो से) शीर्षक जहां पसंद है "% '। $ चैनल [' नाम ']।"% "ORDER BY व्यूटाइम DESC LIMIT 5) v2 ON v.VID = v2.VID ORDER by RAND () LIMIT 1'); foreach ($ Last_Video as $ Video) {$ Array = array ("VID" => $ वीडियो ['VID'], "Thumb" => $ Video ['thumb'], "Total_Videos2 ="> $ Total_Videos ['num '], "Last_Update_Data" => समय ();
मिहाई विटेजु जू '

एसक्यूएल इंजेक्शन से बचने के लिए मापदंडों का इस्तेमाल किया जाना चाहिए
बेनोइट डफेज़

130

आप इस त्रुटि को बायपास करने के लिए नीचे का उपयोग कर सकते हैं।

$Last_Video = $db->fetch_all('
    SELECT VID, thumb
    FROM video
    WHERE VID IN (select * from (
        SELECT VID
        FROM video
        WHERE title LIKE "%'.$Channel['name'].'%"
        ORDER BY viewtime DESC
        LIMIT 5) temp_tab)
    ORDER BY RAND()
    LIMIT 1
');

9
सुनिश्चित नहीं है कि क्यों db इंजन एक सबक्वेरी में एक सबक्वेरी को लपेटने की आवश्यकता के बिना इस तरह से कुछ समायोजित नहीं कर सकता है - जो सिर्फ बेवकूफ लगता है। लेकिन हे, यह बहुत धन्यवाद काम करता है।
बिलिन्नाह

3
मैं रबीह कोदेही से सहमत हूं, इस जवाब को और अधिक वोटों की जरूरत है। यह तरीका UPDATE / DELETE के साथ भी काम करता है, यह बहुत अच्छा है! :) +1
चार्ल्स कैवलकैंट

5
दुर्भाग्य से यह काम नहीं करेगा यदि आप आंतरिक चयन स्टेटमेंट के बाहरी चयन स्टेटमेंट कॉलम को संदर्भित करने का प्रयास कर रहे हैं। उदाहरण: select p1.categoryid, p1.productid from products p1 WHERE p1.productid IN (select * from (select p2.productid from products p2 WHERE p2.categoryid=p1.categoryid order by p2.categoryid asc, p2.unitprice desc limit 3) as tabelka);
टॉमस मल्केज़क

एक जादू की तरह काम किया! हालांकि मुझे आश्चर्य है कि प्रदर्शन अच्छा है, क्या यह बेहतर होगा या उत्तर के रूप में चिह्नित किए गए INNER JOIN बयान।
डैश

5

आपको यहां एक उपकुंजी की आवश्यकता नहीं है। इसे इस्तेमाल करे:

 SELECT VID, thumb
 FROM video
 WHERE title LIKE "%'.$Channel['name'].'%"
 ORDER BY RAND() DESC
 LIMIT 1

MySQL 5.0.26 और बाद में, आपको एक त्रुटि मिलेगी:

MySQL कुछ उपमहाद्वीप संचालकों के लिए उप-श्रेणियों में सीमा का समर्थन नहीं करता है:

संदर्भ


3
यह सबकुछ से लौटे 5 के लिए यादृच्छिक पर एक रिकॉर्ड का चयन करने के मूल लक्ष्य को पूरा नहीं करता है।
माइक ब्रंट

1
संपादित अभी भी यादृच्छिक चयन को केवल उन रिकॉर्ड्स तक सीमित रखने की क्षमता का समर्थन नहीं करता है जिनके लिए 5 उच्चतम मूल्यों के साथviewtime
माइक ब्रंट


-1

आप सरल का उपयोग क्यों नहीं कर सकते:?

SELECT v.VID, v.thumb
FROM video as v
WHERE title LIKE "%'.$Channel['name'].'%"
ORDER BY viewtime DESC
LIMIT 5

यहाँ उपश्रेणियों के लिए क्या?


3
क्योंकि एक त्रुटि है, और यही कारण है कि एक पोस्ट यहाँ है ..:
Sayka

क्योंकि आपकी क्वेरी वह पूरा नहीं करती जो वह करने की कोशिश कर रहा है।
जेफ रयान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.