Probablemente haya definido expiry_date
como un valor de fecha y hora, lo que significa que sus comparaciones son incorrectas. p.ej. necesitas usar
SELECT ... WHERE date(expiry_date) = date(now() + interval 7 day)
en su lugar (tenga en cuenta el envoltorio del día +7 en un date()
operación.
por ejemplo
Dada una tabla con una fecha y un campo de fecha y hora:
+------------+---------------------+
| d | dt |
+------------+---------------------+
| 2013-06-28 | 2013-06-28 08:23:03 |
+------------+---------------------+
Fíjate cómo sale la comparación:
mysql> select d=now(), d=date(now()), dt=now(), dt=date(now()), now() from x;
+---------+---------------+----------+----------------+---------------------+
| d=now() | d=date(now()) | dt=now() | dt=date(now()) | now() |
+---------+---------------+----------+----------------+---------------------+
| 0 | 1 | 0 | 0 | 2013-06-28 08:26:20 |
+---------+---------------+----------+----------------+---------------------+
1 row in set (0.00 sec)
fecha vs. fechahora =falso
fecha frente a fecha =verdadero
fechahora frente a datetime =false (hh:mm:ss no coincide, por lo que no es igual)
datetime vs.s. date =false (la fecha se expande a aaaa-mm-hh 00:00:00 y hh:mm:ss no coincide