sql >> Database >  >> RDS >> Mysql

hoe kan ik mijn query minimaliseren?

Je vragen slaan nergens op. Eerst selecteert u de DISTINCT-datums (negeer tijd) uit de gegevens. Vervolgens selecteert u voor elke datum.. alle gegevens voor die datum?

Waarom voer je niet gewoon één zoekopdracht uit

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

Als je maar 5 dates wilt en de tafel is groot, dan zijn er twee mogelijkheden.

1, Er zijn nooit gaten in datums, u kunt gebruiken

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

2, als er hiaten kunnen zijn, b.v. niets voor gisteren, dus het moet de laatste 5 dagen tonen die records hebben

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

Dit geeft u alle gegevens. Houd in PHP DateNoTime bij. Telkens wanneer dat verandert, bevindt u zich op een andere datum, waardoor u eerder een nieuwe zoekopdracht zou hebben uitgevoerd. De code zou anders slechts minimaal moeten veranderen.

Niet aangevinkte PHP-code

$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. Top n elementen van een groep selecteren in Oracle

  2. hoe voer ik een hoofdletterongevoelige zoekopdracht uit in een Postgres 9.4 JSONB-kolom?

  3. mySQL 'waar naam NIET IN' werkt niet?

  4. Hoe kan ik deelnemen met een afgeleide tabel?