Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

como minimizar minha consulta?


Suas perguntas não fazem sentido. Primeiro você está selecionando as datas DISTINTAS (ignorar hora) dos dados. Então, para cada data, você.. seleciona todos os dados para essa data?

Por que você não dispara apenas uma consulta
SELECT *, DATE(added) as DateNoTime
FROM tb_videos
ORDER BY added desc

Se você quiser apenas 5 datas e a mesa for grande, há duas possibilidades.

1, nunca há lacunas nas datas, você pode usar
SELECT *, DATE(added) as DateNoTime
FROM tb_videos
WHERE added >= ADDDATE(CURDATE(), interval -4 days)
ORDER BY added desc

2, Se pode haver lacunas, por exemplo. nada para ontem então tem que mostrar os últimos 5 dias que tem 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

Isso fornece todos os dados. Em PHP, acompanhe DateNoTime. Sempre que isso muda, você está em uma data diferente, o que anteriormente faria com que você disparasse outra consulta. Caso contrário, o código deve mudar apenas minimamente.

Código PHP não 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
}