8

这是我的原始查询...

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 个查询,还是只选择所有并取消设置 PHP 中不需要的行?
4

3 回答 3

16

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

   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
于 2010-10-21T04:32:09.443 回答
4

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

  • 升级。总是很有趣,通常最好使用最新版本。
  • 使用 php 分解您的子查询。获取 id,然后将结果格式化为逗号分隔的字符串。
于 2010-10-21T04:20:54.133 回答
1

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

老实说,我真的不知道您要完成什么。

于 2010-10-21T04:19:08.783 回答