php MySQL - 此版本的 MySQL 尚不支持“LIMIT & IN/ALL/ANY/SOME”子查询

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/17892762/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-25 16:38:42  来源:igfitidea点击:

MySQL - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery

phpmysql

提问by Mihai Viteazu

this is the code what im using

这是我使用的代码

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

This is the error what give me

这是给我的错误

 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

how i can fix this problem ? its other way to make it ... so i dont get the error ...

我该如何解决这个问题?它的另一种实现方式......所以我没有得到错误......

回答by Mike Brant

Instead of using IN, you can use JOIN

您可以使用 JOIN 而不是使用 IN

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

回答by Surender

You can use below to bypass this error.

您可以使用下面的方法绕过此错误。

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

回答by echo_Me

You don't need a subquery here. Try this:

这里不需要子查询。尝试这个:

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

In MySQL 5.0.26 and later, you will get an error:

在 MySQL 5.0.26 及更高版本中,您将收到错误消息:

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

MySQL 不支持某些子查询运算符的子查询中的 LIMIT:

Reference.

参考

回答by Vasim Walikar

add this is your in condition

补充一下这是你的情况

(SELECT * FROM (
    SELECT * FROM table ORDER BY id DESC LIMIT 50
) sub
ORDER BY id ASC)

回答by Vladimir Krasnobaev

Why you cant use simple: ?

为什么你不能使用 simple: ?

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

what for subqueries here?

这里的子查询是什么?