Le tue domande non hanno senso. Per prima cosa stai selezionando le date DISTINCT (ignora l'ora) dai dati. Quindi per ogni data, tu.. selezioni tutti i dati per quella data?
Perché non fai solo una query
SELECT *, DATE(added) as DateNoTime
FROM tb_videos
ORDER BY added desc
Se vuoi solo 5 date e il tavolo è grande, ci sono due possibilità.
1, non ci sono mai lacune nelle date, puoi usare
SELECT *, DATE(added) as DateNoTime
FROM tb_videos
WHERE added >= ADDDATE(CURDATE(), interval -4 days)
ORDER BY added desc
2, Se possono esserci delle lacune, ad es. niente per ieri, quindi deve mostrare gli ultimi 5 giorni con record
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
Questo ti dà tutti i dati. In PHP, tieni traccia di DateNoTime. Ogni volta che cambia, sei in una data diversa, che in precedenza ti avrebbe causato l'attivazione di un'altra query. Il codice dovrebbe altrimenti cambiare solo in minima parte.
Codice PHP deselezionato
$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
}