2011-06-09 21 views
5

Tengo una tabla de usuarios, donde los usuarios deben ser aprobados, quiero mostrar los usuarios que no están aprobados y que están registrados hace más de 7 días.Seleccionar filas de la tabla MySQL donde la marca de tiempo PHP es anterior a X

Mi user_regdate es una marca de tiempo creada con la función php time().

Esto es lo que intento, no obras:

mysql_query("select * from users WHERE user_regdate < now() - interval 7 day AND approved='0' order by id;"); 

Gracias

+0

¿Qué significa 'SELECT now() - interval 7 day' return? –

+0

Devuelve todas las filas con aprobado = 0 – 2by

+0

No, no, simplemente ejecute esa consulta SELECT que agregué como comentario ... para devolver el valor del tiempo. ¿Qué valor muestra? –

Respuesta

14

timstamps de PHP son un entero simple, mientras que now() de MySQL devuelve un valor de fecha y hora. Lo más probable es que esto arreglar la consulta:

SELECT ... WHERE user_regdate < unix_timestamp(now() - interval 7 day)) ... 

Básicamente, sin la llamada unix_timstamp(), que está comparando manzanas y naranjas.

+0

¡Gracias, funciona! :) – 2by

+0

Love Stackoverflow por esta razón ... ¡gracias! –

3

solución primitiva, en el mejor, pero no soy el mejor en el cálculo del tiempo de MySQL

$timestamp = strtotime("-7 days"); 
mysql_query("SELECT * FROM users WHERE user_regdate < $timestamp AND approved = 0 ORDER BY id"); 
+0

Gracias, también funciona :) – 2by

1

La función time() de php genera una marca de tiempo unix (la cantidad de segundos desde el 1 de enero de 1970). La función now() de MySQL genera una fecha formateada (como 2011-6-9 12:45:34) ... así que no creo que pueda compararlos así.

Trate de usar la marca de tiempo Unix, menos de 7 días, en lugar de ahora() en su consulta:

$7_days_ago = time() - (7 * 24 * 60 * 60); 
mysql_query("select * from users WHERE user_regdate <" . $7_days_ago . " AND approved='0' order by id;"); 
0

probar este;

select * 
from users 
WHERE DATE_SUB(user_regdate,INTERVAL 7 DAY) 
AND approved='0' 
order by id; 
+0

Tenga en cuenta que esta consulta forzará a MySQL a realizar una exploración completa de la tabla y, en consecuencia, tendrá importantes implicaciones de rendimiento. Vea la respuesta de Marc para una consulta más fácil de indexar. –

Cuestiones relacionadas