MySQL 按指定字段自定义列表排序

[转]http://www.php42.com/index.php/database/35-sql/237-mysql-order-by-list微笑

有时以上排序并不能满足我们的需求. 例如, 我们想要按 id 以 5, 3, 7, 1 的顺序排列, 该如何实现. 这也是很多国内外同行经常遇到的问题之一.

下面我们给出按表中某字段, 以我们想要的列表方式排序的解决方案.

解决方案

用"按字段排序" (ORDER BY FIELD).

语法

ORDER BY FIELD(`id`, 5, 3, 7, 1)

要注意的是, FIELD 后面是没有空格的.

因此, 完整的 SQL 为:(补充:先查出这几条数据,再按照规则排序,可加 是desc)

SELECT * FROM `MyTable` 
WHERE `id` IN (1, 7, 3, 5) 
ORDER BY FIELD(`id`, 5, 3, 7, 1)

常见应用

SELECT * FROM `MyTable` 
WHERE `name` IN ('张三', '李四', '王五', '孙六') 
ORDER BY FIELD(`name`, '李四', '孙六', '张三', '王五')

在yii中写法(第二个条件貌似不满足,需要再研究)

这种情况,就可以用 上 orderBy field !如:

[sql]  view plain  copy
  1. $orderBy = (new \yii\db\Query())  
  2.          ->select('*')  
  3.          ->from('product')  
  4.          ->orderBy([new \yii\db\Expression('FIELD (id, 3,1,2,4)')])  
  5.          ->all();  
或者简化成类似这样:

[sql]  view plain  copy
  1. if ( in_array(2, $status) ) {  
  2.     $query->orderBy(["FIELD(`id`,3,2,1)"=>true'g.start_time'=>'asc']);  
  3. else {  
  4.     $query->orderBy(["FIELD(`id`,4,5,6)"=>true'g.start_time'=>'desc']);  
  5. }  
//自己摸索的
->orderBy(["FIELD(a.status,1,0,3,2)"=>true, 'a.begin_at_plan'=>SORT_DESC]);
yii\helpers\ArrayHelper::multisort($listsArray, ['time'], [SORT_DESC]);

$listsArray = array_slice($listsArray, $start, $count);
sql例句:

 1 .SELECT * from wx_live_comment_new ORDER BY FIELD(is_show,1,0);

2. SELECT * from wx_live_comment_new ORDER BY FIELD(id,10,11,12) desc;

3.SELECT * FROM wx_live_comment_new WHERE id in(10,11,12) ORDER BY FIELD(id,11,10,12) desc;

扩展sql(比较繁琐,不建议使用)

4 select * from 
    (SELECT * FROM data where prize_code>0 order by prize_code asc) 
as tmp
UNION
select * from data where prize_code=0;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值