Получить все предметы из таблицы MYSQL, срок действия которых истек 1 день назад - PullRequest
1 голос
/ 22 февраля 2011

MYSQL Таблица структуры trial_list выглядит следующим образом ...

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

мы можем продлить любую пробную версию, и если мы сделаем это, это просто другая строка с новым expiry_date. Теперь мы хотим, чтобы вчера истек срок действия строк, в настоящее время мы используем следующий SQL-запрос .....

Образец базы данных MYSQL

+----+-------------+-------------+-------------+----------+---------------------+
| 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, предположим, что мы дали некоторую дату истечения срока действия пользователя 1 февраля 2011 года, а затем мы снова изменились с 12 февраля 2011 года, поэтому он выбирает 1 февраля 2011 запись. Я думаю, что это имеет смысл.

Ответы [ 2 ]

2 голосов
/ 22 февраля 2011

То, что вам нужно сделать в первую очередь, это получить последний элемент для 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

0 голосов
/ 22 февраля 2011

Попробуйте использовать NOW () вместо CURDATE (), вы сравниваете дату с меткой времени, NOW () будет сравнивать метки времени.

...