মাইএসকিউএল - মাইএসকিউএলের এই সংস্করণটি এখনও 'লিমিটেড এবং ইন / সমস্ত / কোনও / কিছু উপকেন্দ্র সমর্থন করে না


95

এই কোড আমি কি ব্যবহার করছি

    $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

আমি এই সমস্যাটি কীভাবে সমাধান করতে পারি? এটি তৈরির জন্য এটি অন্য উপায় ... যাতে আমি ত্রুটিটি পাই না ...


আমি কীভাবে এই লোল ঠিক করতে পারি ... বা কীভাবে এটি কাজ করতে পারি ...
মিহাই ভিটিয়াজু

মাইএসকিউএল এর একটি সংস্করণ ব্যবহার করুন যা এটি সমর্থন করে?
পল ডেজার্ট

আপনি দয়া করে পুরো কোড সরবরাহ করতে পারেন? উদাহরণস্বরূপ কিভাবে $ db সেট করা আছে?
bestprogrammerintheworld

5.1.59 এটি আমি যে সংস্করণটি ব্যবহার করি তা হল
মিহাই

4
তবুও
কেসটি

উত্তর:


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

আমি এই কোডটি চেষ্টা করে দেখি এবং নিখুঁতভাবে কাজ করে ... আমি এটি কীভাবে ব্যবহার করি $ সর্বশেষ_ভিডিও = $ db-> ফেচ_ল ('নির্বাচন করুন ভি। ভিআইডি, ভিথাম্ব থেকে ভিডিও হিসাবে অন্তর্গত যোগদান করুন (ভিডিওটি থেকে ভিডিওটি নির্বাচন করুন যেখানে শিরোনামটি পছন্দ করুন "% '। $ চ্যানেল [' নাম ']' foreach ($ ভিডিও হিসাবে $ সর্বশেষ_ভিডিও) {ray অ্যারে = অ্যারে ("ভিআইডি" => $ ভিডিও ['ভিআইডি'], "থাম্ব" => $ ভিডিও ['থাম্ব' '], "মোট_ভিডিও 2" => $ মোট_ভিডিও [' সংখ্যা '], "শেষ_আপনিধ্যে_ডাটা" => সময় ());
মিহাই ভিটিয়াজু

এসকিউএল ইঞ্জেকশন এড়ানোর জন্য প্যারামিটারগুলি ব্যবহার করা উচিত
বেনোইট ডাফেজ

131

আপনি এই ত্রুটিটি বাইপাস করতে নীচে ব্যবহার করতে পারেন।

$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
');

10
নিশ্চিত নয় কেন ডিবি ইঞ্জিন সাবকোয়রিতে একটি সাবকিউরিটি মোড়ানোর প্রয়োজন ছাড়াই এই জাতীয় কিছু উপস্থাপন করতে পারে না - যা কেবল বোকা বলে মনে হয়। কিন্তু ওহে, এটি তাই ধন্যবাদ কাজ করে।
বিলিন্নো

4
আমি রাবিহ কোডেহের সাথে একমত, এই উত্তরের আরও ভোট দরকার। এইভাবে আপডেট / ডিলিটের সাথেও কাজ করে, এটি দুর্দান্ত is :) +1
চার্লস ক্যাভালঙ্কাট

4
দুর্ভাগ্যক্রমে এটি কাজ করবে না যদি আপনি অভ্যন্তরীণ নির্বাচনের স্তম্ভ থেকে বহিরাগত নির্বাচন বিবৃতি কলামটি উল্লেখ করতে চেষ্টা করছেন। উদাহরণ: 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);
টমাসজ মুলারসিজিক

মোহন মত কাজ! তবে আমি পারফরম্যান্সের ভিত্তিতে বিস্মিত হয়েছি, এটি কি আরও ভাল হবে বা উত্তর হিসাবে জড়িত জড়িত বিবৃতিটি।
ড্যাশ

5

আপনার এখানে সাব-কোয়েরির দরকার নেই। এটা চেষ্টা কর:

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

মাইএসকিউএল 5.0.26 এবং তার পরে, আপনি একটি ত্রুটি পাবেন:

মাইএসকিউএল নির্দিষ্ট সাবকিউরি অপারেটরের জন্য সাবকিউরিগুলিতে লিমিট সমর্থন করে না:

রেফারেন্স


4
সাবকোয়ারি থেকে ফিরে আসা 5 এর জন্য এলোমেলোভাবে একটি রেকর্ড নির্বাচন করার মূল লক্ষ্যটি পূরণ করে না।
মাইক ব্রেন্ট

4
সম্পাদনাটি এখনও এলোমেলোভাবে নির্বাচন কেবলমাত্র সেই রেকর্ডগুলিতে সীমাবদ্ধ করার ক্ষমতা সমর্থন করে নাviewtime
মাইক ব্রেন্ট


-1

আপনি কেন সহজ ব্যবহার করতে পারবেন না:?

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

এখানে subqueries জন্য কি?


4
কারণ এখানে একটি ত্রুটি রয়েছে, এবং পোস্ট কেন এখানে রয়েছে তা নিশ্চিত করে .. :
পি

কারণ আপনার জিজ্ঞাসাটি তিনি যা করার চেষ্টা করছেন তা সম্পাদন করে না।
জেফ রায়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.