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

时间:2010-10-21 03:35:29

标签: php mysql mysql-error-1235

这是我的原始查询...

SELECT `id`
  FROM `properties`
 LIMIT 10, 20

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    

MySQL说......

  

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

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

所以这是一个多问题,但都是相关的...

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:4)

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

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

答案 2 :(得分:1)

MySQL确实在子查询中支持LIMIT ......但MySQL不支持在子查询中使用IN / NOT IN。

说实话,我真的不知道你想要完成什么。