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入境。我认为这是有道理的。
答案 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()将比较时间戳。