mysql根据指定字段排序_mysql如何根据某个字段的值进行循环排序?

有意思的问题。试着做个简化版供参考

mysql> select * from t limit 10;

+-----+--------+

| id | c |

+-----+--------+

| 521 | group2 |

| 522 | group2 |

| 523 | group3 |

| 524 | group2 |

| 525 | group3 |

| 526 | group2 |

| 527 | group2 |

| 528 | group3 |

| 529 | group2 |

| 530 | group1 |

+-----+--------+

10 rows in set (0.00 sec)

mysql> select c,count(*) from t group by c;

+--------+----------+

| c | count(*) |

+--------+----------+

| group1 | 13 |

| group2 | 19 |

| group3 | 28 |

+--------+----------+

3 rows in set (0.00 sec)

mysql> select c,id from t ,(select @x:=0,@y:=0,@z:=0) x order by

-> case when c='group1' then @x:=@x+1

-> when c='group2' then @y:=@y+1

-> when c='group3' then @z:=@z+1 end

-> ,c limit 20;

+--------+-----+

| c | id |

+--------+-----+

| group1 | 530 |

| group2 | 521 |

| group3 | 523 |

| group1 | 532 |

| group2 | 522 |

| group3 | 525 |

| group1 | 535 |

| group2 | 524 |

| group3 | 528 |

| group1 | 540 |

| group2 | 526 |

| group3 | 533 |

| group1 | 541 |

| group2 | 527 |

| group3 | 538 |

| group1 | 545 |

| group2 | 529 |

| group3 | 539 |

| group1 | 547 |

| group2 | 531 |

+--------+-----+

20 rows in set (0.00 sec)

思路大体是,列出表T,如果group2第一次出现,则这一行标记为grp=1,第二次出现,标记为grp=2,第n次出现则标记为grp=n……group1和group3也同样处理,然后按照grp 和c 排序即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值