在MySQL的子查询中是否有使用LIMIT的解决方法?

ale*_*lex 7 php mysql mysql-error-1235

这是我的原始查询......

SELECT `id`
  FROM `properties`
 LIMIT 10, 20
Run Code Online (Sandbox Code Playgroud)

LIMIT条件是分页.

现在,我必须像以前一样得到所有,但我需要只有三分之一的行存在条件.

我想出了这个,只是LIMIT 30在我弄清楚如何做之前投入(总行数匹配/ 3)*2.

SELECT `id`
  FROM `properties`
 WHERE `id` NOT IN (SELECT `id` 
                      FROM `properties` 
                     WHERE `vendor` = "abc" 
                  ORDER BY RAND() 
                     LIMIT 30)
LIMIT 10, 20    
Run Code Online (Sandbox Code Playgroud)

MySQL说......

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

我想我不能LIMIT在子查询中使用.

所以这是一个多问题但所有相关...

  • LIMIT子查询中是否有解决方法?
  • 我可以用MySQL选择1/3匹配的行吗?
  • 我是否需要将其转换为2个查询,或者只选择all并取消设置PHP中不需要的行?

OMG*_*ies 15

对不起,我迟到了,这对我有用:

   SELECT p.id 
     FROM properties p
LEFT JOIN (SELECT t.id
             FROM PROPERTIES t
            WHERE t.vendor = 'abc'
         ORDER BY RAND()
            LIMIT 30) x ON x.id = p.id
    WHERE x.id IS NULL
    LIMIT 10, 20
Run Code Online (Sandbox Code Playgroud)


Chr*_*nry 4

如果您的 MySQL 版本不支持,那么您有 2 个选择:

  • 升级。总是很有趣,而且通常最好使用最新版本。
  • 使用 php 分解您的子查询。获取 ids,然后将结果格式化为逗号分隔的字符串。