抢夺所有项目从MYSQL表过期1天前

时间:2011-02-22 07:13:58

标签: php mysql date timestamp

MYSQL表trial_list结构如下......

id | product_id | expiry_date(date) | by_user | curr_datentime(timestamp)

我们可以扩展任何试验,如果我们这样做,它只是另一行有新的expiry_date。 现在我们想让行昨天过期,我们目前正在使用以下sql查询.....

示例MYSQL DATASET

+----+-------------+-------------+-------------+----------+---------------------+
| id | product_id  | comment     | expiry_date | by_user  | dnt                 |
+----+-------------+-------------+-------------+----------+---------------------+
| 2  | 50          | testing     | 2011-02-18  | tester   | 2011-02-17 23:36:12 |
+----+-------------+-------------+-------------+----------+---------------------+
| 3  | 50          | again       | 2011-02-20  | tester   | 2011-02-19 20:36:12 |
+----+-------------+-------------+-------------+----------+---------------------+
| 4  | 50          | extend      | 2011-02-23  | tester   | 2011-02-21 22:36:12 |
+----+-------------+-------------+-------------+----------+---------------------+


$sql =   'SELECT id, product_id, expiry_date, by_user, curr_datentime FROM trial_list WHERE expiry_date < CURDATE() ORDER BY expiry_date DESC';

我们认为这是不正确的,因为它获取的所有日期都比昨天更早没有更新expiry_date,假设我们已经给了一些用户到期日2011年1月,然后我们再次更改2011年第12个月,所以它选择了第1个feb 2011入境。我认为这是有道理的。

2 个答案:

答案 0 :(得分:2)

首先要做的是获取每个product_id的最新项目。之后,您可以进一步将其过滤到已过期的那些。类似的东西:

SELECT a.* FROM
trial_list AS a
LEFT JOIN trial_list AS b ON a.product_id = b.product_id AND a.id < b.id
WHERE b.product_id IS NULL
AND a.expiry_date < curdate()

请参阅http://dev.mysql.com/doc/refman/5.5/en/example-maximum-row.html

答案 1 :(得分:0)

尝试使用NOW()而不是CURDATE(),您要将Date与时间戳进行比较,NOW()将比较时间戳。