Suas perguntas não fazem sentido. Primeiro você está selecionando as datas DISTINTAS (ignorar hora) dos dados. Então, para cada data, você.. seleciona todos os dados para essa data?
Por que você não dispara apenas uma consulta
SELECT *, DATE(added) as DateNoTime
FROM tb_videos
ORDER BY added desc
Se você quiser apenas 5 datas e a mesa for grande, há duas possibilidades.
1, nunca há lacunas nas datas, você pode usar
SELECT *, DATE(added) as DateNoTime
FROM tb_videos
WHERE added >= ADDDATE(CURDATE(), interval -4 days)
ORDER BY added desc
2, Se pode haver lacunas, por exemplo. nada para ontem então tem que mostrar os últimos 5 dias que tem registros
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
Isso fornece todos os dados. Em PHP, acompanhe DateNoTime. Sempre que isso muda, você está em uma data diferente, o que anteriormente faria com que você disparasse outra consulta. Caso contrário, o código deve mudar apenas minimamente.
Código PHP não verificado
$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
}