我正在尝试使用mysql进行特定排序。这是我的表
id fb_id ... date_added
1 1111111111 2013-04-15 14:15:00
2 1111111111 2013-04-15 14:16:00
3 1111111111 2013-04-15 14:17:00
4 2222222222 2013-04-15 14:18:00
5 3333333333 2013-04-15 14:19:00
6 4444444444 2013-04-15 14:20:00
7 2222222222 2013-04-15 14:21:00
8 1111111111 2013-04-15 14:22:00
我期待的是首先按fb_id 111111111和2222222222进行排序,然后按照最新的日期顺序排序其余...
id fb_id ... date_added
1 1111111111 2013-04-15 14:22:00
2 2222222222 2013-04-15 14:21:00
3 2222222222 2013-04-15 14:18:00
4 1111111111 2013-04-15 14:17:00
5 1111111111 2013-04-15 14:16:00
6 1111111111 2013-04-15 14:15:00
7 4444444444 2013-04-15 14:20:00
8 3333333333 2013-04-15 14:19:00
SQL我正在尝试:
SELECT `id`, `fb_id`, `date_added` from MyTable
ORDER BY case when fb_id in (1111111111,2222222222) then -1 else date_added end, date_added desc
它首先按fb_id排序,但其余数据没有按'date_added desc'排序?请帮忙..
答案 0 :(得分:6)
由于您的date_added
条款,您首先按升序排序ELSE
。尝试:
ORDER BY case when fb_id in (1111111111,2222222222) then 0 else 1 end,
date_added desc
答案 1 :(得分:2)
应谨慎地考虑使用基于行的函数的解决方案,当您尝试扩展时,它们有时会导致问题。
如果你的桌子相对较小,这应该不是问题,但是,如果你担心,你可以尝试这样的事情:
select 1 as seq, id, fb_id, date_added
where fb_id in (1111111111,2222222222)
union all select 2 as seq, id, fb_id, date_added
where fb_id not in (1111111111,2222222222)
order by seq, fb_id, date_added desc
这导致对DBMS的两个查询,但这通常比在排序之前对结果集的每一行执行额外处理更快。
与所有解决方案一样,您应该衡量影响而不是猜测,并使用代表性数据来做。