Truy vấn của bạn không có ý nghĩa. Trước tiên, bạn đang chọn ngày DISTINCT (bỏ qua thời gian) từ dữ liệu. Sau đó, đối với mỗi ngày, bạn .. chọn tất cả dữ liệu cho ngày đó?
Tại sao bạn không chỉ kích hoạt một truy vấn
SELECT *, DATE(added) as DateNoTime
FROM tb_videos
ORDER BY added desc
Nếu bạn chỉ muốn có 5 ngày và bảng lớn, có hai khả năng.
1, Không bao giờ có khoảng cách về ngày tháng, bạn có thể sử dụng
SELECT *, DATE(added) as DateNoTime
FROM tb_videos
WHERE added >= ADDDATE(CURDATE(), interval -4 days)
ORDER BY added desc
2, Nếu có thể có khoảng trống, ví dụ:không có gì cho ngày hôm qua nên nó phải hiển thị 5 ngày qua có hồ sơ
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
Điều này cung cấp cho bạn tất cả dữ liệu. Trong PHP, hãy theo dõi DateNoTime. Bất cứ khi nào điều đó thay đổi, bạn đang ở một ngày khác, điều này trước đây có thể khiến bạn kích hoạt một truy vấn khác. Nếu không, mã sẽ chỉ thay đổi nhỏ.
Mã PHP bỏ chọn
$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
}