sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo minimizar mi consulta?

Tus consultas no tienen sentido. Primero, está seleccionando las fechas DISTINTAS (ignorar la hora) de los datos. Luego, para cada fecha, ¿usted... selecciona todos los datos para esa fecha?

¿Por qué no lanzas una sola consulta?

SELECT *, DATE(added) as DateNoTime
FROM tb_videos
ORDER BY added desc

Si solo quieres 5 fechas y la mesa es grande, hay dos posibilidades.

1, nunca hay lagunas en las fechas, puede usar

SELECT *, DATE(added) as DateNoTime
FROM tb_videos
WHERE added >= ADDDATE(CURDATE(), interval -4 days)
ORDER BY added desc

2, si puede haber lagunas, p. nada para ayer por lo que tiene que mostrar los últimos 5 días que tienen registros

SELECT *, DATE(added) as DateNoTime
FROM (
    select min(DateNoTime) as MinDate
    from
    (
        select DATE(added) as DateNoTime
        FROM tb_videos
        order by DateNoTime desc
        limit 5
    ) x) y, tb_videos
WHERE added >= y.MinDate
ORDER BY added desc

Esto te da todos los datos. En PHP, realice un seguimiento de DateNoTime. Cada vez que eso cambia, se encuentra en una fecha diferente, lo que previamente habría provocado que disparara otra consulta. De lo contrario, el código solo debería cambiar mínimamente.

Código PHP no verificado

$result = mysql_query('
    SELECT *, DATE(added) as DateNoTime
    FROM (
        select min(DateNoTime) as MinDate
        from
        (
            select DATE(added) as DateNoTime
            FROM tb_videos
            order by DateNoTime desc
            limit 5
        ) x) y, tb_videos
    WHERE added >= y.MinDate
    ORDER BY added desc
');
$prevdate = NULL;
foreach($result as $rst)
{    
    if($prevdate!=$rst=>DateNoTime) {
        // do something, like printing out a header for each new date
        $prevdate=$rst=>DateNoTime;
    }

    // do something with the record
}