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
}