sql >> Database teknologi >  >> RDS >> Mysql

hvordan minimerer jeg min forespørgsel?

Dine forespørgsler giver ingen mening. Først vælger du DISTINKT datoer (ignorer tid) fra dataene. Så for hver dato vælger du... alle data for den dato?

Hvorfor affyrer du ikke bare én forespørgsel

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

Ønsker du kun 5 dadler, og bordet er stort, er der to muligheder.

1, Der er aldrig huller i datoer, du kan bruge

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

2, Hvis der kan være huller, f.eks. intet for i går, så det skal vise sidste 5 dage, der har rekorder

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

Dette giver dig alle data. I PHP skal du holde styr på DateNoTime. Når det ændrer sig, er du på en anden dato, hvilket tidligere ville have fået dig til at afgive en anden forespørgsel. Koden skal ellers kun ændres minimalt.

Ikke markeret PHP-kode

$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. Gem ændringer til database vaadin

  2. Mysql transaktion rollback ved fejl i opdatering

  3. Sådan administrerer du automatisk failover af MySQL-databasen til Moodle

  4. Android SQLite jokertegn