Italico76,
Esta es mi propuesta:
Código sql:
Ver originalSELECT c.ip, c.claves, c.veces
FROM consultas c
INNER JOIN (
SELECT ip
FROM consultas
WHERE filtrado =0
ORDER BY fecha DESC , hora DESC
LIMIT 60
)T1 ON c.ip = t1.ip
ORDER BY RAND( )
LIMIT 30
He usado en el select interior ip como campo porque me parece que es un dato que no se repetirá en los campos, pero tampoco sé si es así. Igualmente he puesto filtrado dentro, lo que quiere decir que te buscará los 60 últimos con filtrado a 0; y luego esos los ordenará al azar y elegirá 30.
Si quieres que seleccione los 60 últimos tengan o no filtrado a 0 y luego que de esos elija 30 con filtrado a 0 tendrías que escribir esto (pero podría ocurrir que hubiera menos de 30, incluso ninguno):
Código sql:
Ver originalSELECT c.ip, c.claves, c.veces
FROM consultas c
INNER JOIN (
SELECT ip
FROM consultas
ORDER BY fecha DESC , hora DESC
LIMIT 60
)T1 ON c.ip = t1.ip WHERE c.filtrado =0
ORDER BY RAND( )
LIMIT 30
Prueba y dinos.
Eso si ip no se repite. Si aparece en varios registros de consulta la misma ip, tendríamos que hacer un group by y sacar el max de date (o de la suma en tiempo de date y hora para hacerlo más exacto). Dinos si se repite y te preparamos una propuesta.