sql >> Databasteknik >  >> RDS >> Mysql

hur minimerar jag min fråga?

Dina frågor är meningslösa. Först väljer du DISTINKT datum (ignorera tid) från data. Sedan för varje datum, väljer du all data för det datumet?

Varför skickar du inte bara en fråga

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

Om du bara vill ha 5 dejter, och bordet är stort, finns det två möjligheter.

1, Det finns aldrig luckor i datum, du kan använda

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

2, Om det kan finnas luckor, t.ex. inget för igår så det måste visa senaste 5 dagarna som har rekord

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

Detta ger dig all data. Håll koll på DateNoTime i PHP. Närhelst det ändras är du på ett annat datum, vilket tidigare skulle ha fått dig att skicka en annan fråga. Koden bör annars bara ändras minimalt.

Avmarkerad PHP-kod

$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. Sammanlagda värden över ett intervall av timmar, varje timme

  2. REGEXP_REPLACE() Funktion i Oracle

  3. Hur man behandlar MAX() i en tom tabell som 0 istället för NULL

  4. Hierarkisk lista över triggerhändelsetyper i SQL Server 2019