从最新的100中选择mysql表中的所有结果

时间:2012-08-24 22:10:45

标签: mysql phpmyadmin

  

可能重复:
  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的消息,所以我希望有人可以用另一种方式帮助我实现这个目的吗?谢谢你的时间。

2 个答案:

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

答案 1 :(得分:0)

LIMITIN子查询中不能包含NOT IN。但您可以在FROMWHERE子句中的子查询中。诀窍是让子查询只返回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 ;