可能重复:
How to select all records from table apart from the last 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的消息,所以我希望有人可以用另一种方式帮助我实现这个目的吗?谢谢你的时间。
答案 0 :(得分:1)
检索50行,跳过前100名:
SELECT * FROM order_table ORDER BY order_id DESC LIMIT 100,50
答案 1 :(得分:0)
LIMIT
或IN
子查询中不能包含NOT IN
。但您可以在FROM
或WHERE
子句中的子查询中。诀窍是让子查询只返回1行,然后使用<
或<=
来比较该值。
这将显示除(由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 ;