sql >> Databáze >  >> RDS >> Mysql

jak minimalizovat svůj dotaz?

Vaše dotazy nedávají smysl. Nejprve z dat vybíráte DISTINCT data (ignorujte čas). Potom pro každé datum vyberete všechna data pro toto datum?

Proč nezadáte jeden dotaz

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

Pokud chcete pouze 5 dat a tabulka je velká, existují dvě možnosti.

1, V datech nikdy nejsou mezery, můžete použít

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

2, Pokud mohou být mezery, např. nic za včerejšek, takže musí zobrazit posledních 5 dní, které mají záznamy

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

Tím získáte všechna data. V PHP sledujte DateNoTime. Kdykoli se to změní, nacházíte se v jiném datu, což by dříve způsobilo spuštění dalšího dotazu. Kód by se jinak měl změnit jen minimálně.

Nezaškrtnutý kód PHP

$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
}


  1. Oracle sql nebo pl/sql:Počítejte na základě hodnot předchozího řádku a sloupce data

  2. Výkon SQL Serveru TOP CPU Query -2

  3. Dynamický příkaz SQL SELECT s PHP na základě uživatelských možností

  4. Wordpress – získávání obrázků z db uložených jako data blob