Mysql
 sql >> Baza danych >  >> RDS >> Mysql

jak zminimalizować moje zapytanie?

Twoje zapytania nie mają sensu. Najpierw wybierasz DISTINCT daty (ignoruj ​​czas) z danych. Następnie dla każdej daty wybierasz wszystkie dane dla tej daty?

Dlaczego nie uruchomisz tylko jednego zapytania

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

Jeśli chcesz tylko 5 randek, a stół jest duży, istnieją dwie możliwości.

1, Nigdy nie ma przerw w datach, możesz użyć

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

2, jeśli mogą występować luki, np. nic na wczoraj, więc musi pokazać ostatnie 5 dni, które mają rekordy

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

To daje ci wszystkie dane. W PHP śledź DateNoTime. Za każdym razem, gdy to się zmieni, znajdujesz się w innej dacie, co wcześniej spowodowało uruchomienie kolejnego zapytania. W przeciwnym razie kod powinien zmienić się tylko minimalnie.

Niezaznaczony kod 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP MYSQL wyszukaj kod pocztowy za pomocą LIKE

  2. MySQL:IF tabela istnieje, skróć i wstaw ELSE utwórz

  3. MySQL Porównaj bazy danych

  4. W MySQL, z FKs, co robi CONSTRAINT?

  5. Mam dużo danych w Excelu i chcę je dodać do bazy danych MySQL, jak to zrobić?