-1

可能重复:
如何从表中选择除最后 100 条之外的所有记录

我希望运行一个 cron 作业来清除一些客户信息。我有一个存储客户信息的表,我只是在测试 SQL 查询以确保它能够正常工作。我有这个问题:

$result = mysql_query("SELECT * from order-table WHERE order_id NOT IN (
SELECT order_id
from order-table
ORDER BY order_id desc) LIMIT 50");


while($row = mysql_fetch_array($result)){

echo $row['order_id'];

echo "<br />";
}

问题是我收到一个错误:mysql_fetch_array() 期望参数 1 是资源,给定的布尔值

如果我直接在 SQL 中尝试查询,我会收到一条消息,即子查询不支持 LIMIT,所以我希望有人可以帮助我以另一种方式实现这一目标?感谢您的时间。

4

2 回答 2

1

检索 50 行,跳过前 100 行:

SELECT * FROM order_table ORDER BY order_id DESC LIMIT 100,50

http://dev.mysql.com/doc/refman/5.5/en/select.html

于 2012-08-24T22:15:49.657 回答
0

你不能LIMIT在一个INNOT IN子查询中。但是你可以在子查询中的FROMorWHERE子句中。诀窍是让子查询仅返回 1 行,然后使用<<=比较该值。

这将显示除 (ordered by order_id) 最后 50 行之外的所有行:

SELECT ot.* 
FROM order-table AS ot 
  JOIN 
    ( SELECT order_id
      FROM order-table
      ORDER BY order_id DESC
        LIMIT 1 OFFSET 50
    ) AS lim
    ON ot.order_id <= lim.order_id ; 
于 2012-08-24T22:19:39.453 回答