mysql按顺序排列的时候

时间:2013-04-15 07:16:47

标签: mysql

我正在尝试使用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'排序?请帮忙..

2 个答案:

答案 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的两个查询,但这通常比在排序之前对结果集的每一行执行额外处理更快。

与所有解决方案一样,您应该衡量影响而不是猜测,并使用代表性数据来做。

相关问题