Dine forespørgsler giver ingen mening. Først vælger du DISTINKT datoer (ignorer tid) fra dataene. Så for hver dato vælger du... alle data for den dato?
Hvorfor affyrer du ikke bare én forespørgsel
SELECT *, DATE(added) as DateNoTime
FROM tb_videos
ORDER BY added desc
Ønsker du kun 5 dadler, og bordet er stort, er der to muligheder.
1, Der er aldrig huller i datoer, du kan bruge
SELECT *, DATE(added) as DateNoTime
FROM tb_videos
WHERE added >= ADDDATE(CURDATE(), interval -4 days)
ORDER BY added desc
2, Hvis der kan være huller, f.eks. intet for i går, så det skal vise sidste 5 dage, der har rekorder
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
Dette giver dig alle data. I PHP skal du holde styr på DateNoTime. Når det ændrer sig, er du på en anden dato, hvilket tidligere ville have fået dig til at afgive en anden forespørgsel. Koden skal ellers kun ændres minimalt.
Ikke markeret PHP-kode
$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
}