MySQL - 这个版本的MySQL还不支持'LIMIT&IN/ALL/ANY/SOME子查询

Mih*_*azu 78 php mysql

这是我正在使用的代码

    $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
');
Run Code Online (Sandbox Code Playgroud)

这是给我的错误

 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
Run Code Online (Sandbox Code Playgroud)

我怎么能解决这个问题?它的其他方式...所以我没有得到错误...

Mik*_*ant 135

您可以使用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
Run Code Online (Sandbox Code Playgroud)


小智 119

您可以使用以下方法绕过此错误.

$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
');
Run Code Online (Sandbox Code Playgroud)

  • 不知道为什么db引擎无法容纳这样的东西而不需要在子查询中包装子查询 - 这看起来很愚蠢.但是,嘿,这很有效,谢谢. (8认同)
  • 不幸的是,如果你试图从内部选择标准引用外部选择语句列,这将不起作用.示例:`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限制3)作为tabelka);` (5认同)
  • 我同意 Rabih Kodeih,这个答案需要更多选票。这种方式也适用于 UPDATE/DELETE,太棒了!:) +1 (3认同)

ech*_*_Me 6

这里不需要子查询.试试这个:

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

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

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

参考.

  • 这不符合从子查询返回的5随机选择一条记录的原始目标. (2认同)