对查询中的组进行排序

时间:2012-03-16 06:00:28

标签: php mysql sorting

我使用以下查询对我网站上的帖子进行分页:

select * from songs t1 join (
select to_days(date) day from songs 
group by day 
order by day desc 
limit $start_row, $items_per_page
) t2
on to_days(t1.date) = t2.day

根据我的$start_row$items_per_page,这将返回所有帖子,比如说过去7天。无论每天是否有超过1个帖子或一天是空的并且跳过。

例如:

sample results

查询上方已正确返回最近7天的所有帖子。今天。昨天。前一天等等......

但是,如果您查看最左侧的表id 12##值,以及最右侧的时间戳日值73####。你会发现它们是向后组合的。

如何切换此查询以便在相同的分组中以相反的顺序返回相同的结果?

例如:

哦,我的! - Run This Town(TMS remix) 失落的地图 - 回归基础(La Royale Remix)

来自巴黎的迪米特里& DJ罗卡 - 我需要一个理由(无线电混音) Chromeo - Hot Mess(23 Dubstep Remix)

依此类推......我尝试删除desc值,但只返回表格中最旧条目的分组。

2 个答案:

答案 0 :(得分:2)

您还需要在外部选择中添加ORDER BY,而不仅仅是正在加入的内部选择。

SELECT *
FROM songs t1
JOIN (
    SELECT to_days(date) day FROM songs 
    GROUP BY day 
    ORDER BY day DESC
    LIMIT $start_row, $items_per_page
) t2 ON to_days(t1.date) = t2.day
ORDER BY day DESC

(最后一行是您需要添加的位。)

答案 1 :(得分:0)

我会在子查询的外部订购您的数据(请注意最后一行),请调整asc / desc的最后一行,或者如果您想订购。

select * from songs t1 join (
select to_days(date) day from songs 
group by day 
order by day desc 
limit $start_row, $items_per_page
) t2
on to_days(t1.date) = t2.day
order by id desc