Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql按情况订购时_Mysql - Fatal编程技术网

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

我正在尝试使用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 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
?我认为我的表不会这么大,但如果真的这样做,这可能是更好的方法,谢谢!