2013-07-26 14 views
41

「LIMIT&IN /をサポートしていない、これはこれは私に
のMySQL - MySQLのこのバージョンはまだALL/ANY/SOMEサブクエリ

を与えるどのようなエラーである

$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 

どうすればこの問題を解決できますか?それを作る他の方法...だから私はエラーを取得しないでください...

+1

何が質問ですか? –

+0

どのように私はこの笑を修正することができますか...それはどのように働くことができます... –

+0

それをサポートするMySQLのバージョンを使用しますか? –

答えて

86

代わりのUSINGで、あなたは簡単な使用カントはなぜ

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 
+0

私はこのコードを試して、完璧に動作します...これは私がそれを使う方法です$ Last_Video = $ db - > fetch_all( 'v.VID、v.thumbを選択すると、ビデオからビデオを選択します(ビデオからVIDEを選択します)'% '。$チャンネル[' name ']。'% 'ORDER BYビュータイムDESC LIMIT 5) v2 ON v.VID = v2.VID ORDER BY RAND()LIMIT 1 '); foreachの($ビデオなど$ Last_Video){ $配列=配列( "VID" => $動画[ 'VID']、 "サム" => $動画[ 'サム']、 "Total_Videos2" = > $ Total_Videos [num ']、 "Last_Update_Data" =>時刻() ); –

4

ここでサブクエリは必要ありません。 MySQLの5.0.26で

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

を以降では、エラーになります:これを試してみてください

MySQL does not support LIMIT in subqueries for certain subquery operators:

Referenceを。

+2

サブクエリから返された5つのレコードをランダムに選択するという本来の目標には合致しません。 –

+0

編集はまだ 'viewtime'の5つの最も高い値を持つレコードだけにランダムな選択を制限する機能をサポートしていません –

0

JOINを使用することができますか?

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

ここでサブクエリは何ですか?

+1

エラーがあり、投稿がここにある理由:-P – Sayka

73

このエラーを回避するには、以下を使用できます。

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

これは良い答えです、より多くの票が必要です。 –

+5

これは受け入れられた答え – Stefan

+1

なぜDBエンジンがサブクエリでサブクエリをラップする必要なくこのようなものに対応できないのか分かりません。しかし、ちょっと、これはとても感謝します。 – billynoah