mysql按情况订购时
我正在尝试使用mysql进行特定的排序。这是我的桌子mysql按情况订购时,mysql,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
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 11111111和22222排序,然后按最新日期顺序排序,如下所示
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排序,但其余数据不按“日期添加描述”排序?请帮助..由于您的
ELSE
子句,您首先按添加的日期按升序排序。尝试:
ORDER BY case when fb_id in (1111111111,2222222222) then 0 else 1 end,
date_added desc
使用基于行的函数的解决方案应该仔细考虑,当您尝试放大时,它们有时会导致问题
如果您的桌子相对较小,这应该不是问题,但如果您担心,您可以尝试以下方法:
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进行两次查询,但这通常比在排序之前对结果集的每一行执行额外处理要快
与所有解决方案一样,您应该测量影响,而不是猜测,并使用代表性数据进行测量。为什么2222222
之后仍有1111111
?我认为我的表不会这么大,但如果真的这样做,这可能是更好的方法,谢谢!