刚刚遇到个特殊需求,如下查询,先根据ddate和money排序查询出10条数据,但是如果查询出来的记录的id中包含特殊id,如vip会员的id,需要排序到最前面;

mysql> select id,money,ddate,type,size from pincome order by ddate desc,money desc limit 10;                  

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

| id    | money   | ddate    | type | size |

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

| 14469 |  658869 | 20140616 | 1    | 3898 |

| 14495 |  195635 | 20140616 | 41   |  197 |

| 14489 |  139698 | 20140616 | 3    |  106 |

| 14481 |   84370 | 20140616 | 222  |   59 |

| 14483 |   66598 | 20140616 | 241  |   45 |

| 14479 | 56213.1 | 20140616 | 221  |   55 |

| 14487 |   44254 | 20140616 | 281  |   75 |

| 14505 |   40702 | 20140616 | 8    |   52 |

| 14493 |   33450 | 20140616 | 4    |    6 |

| 14477 |   25812 | 20140616 | 21   |   27 |

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

10 rows in set (0.01 sec)

查了一些资料,发现mysql还真能实现,oracle在这方面貌似还实现不了(或许只是我知识不够而已,还没有发现oracle怎么实现)

mysql下的实现方法如下:(假如id=14505是我们的VIP高级会员,排序时需要靠前显示)

mysql> select id,money,ddate,type,size from pincome order by id=14505 desc ,ddate desc,money desc limit 10;   

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

| id    | money   | ddate    | type | size |

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

| 14505 |   40702 | 20140616 | 8    |   52 |

| 14469 |  658869 | 20140616 | 1    | 3898 |

| 14495 |  195635 | 20140616 | 41   |  197 |

| 14489 |  139698 | 20140616 | 3    |  106 |

| 14481 |   84370 | 20140616 | 222  |   59 |

| 14483 |   66598 | 20140616 | 241  |   45 |

| 14479 | 56213.1 | 20140616 | 221  |   55 |

| 14487 |   44254 | 20140616 | 281  |   75 |

| 14493 |   33450 | 20140616 | 4    |    6 |

| 14477 |   25812 | 20140616 | 21   |   27 |

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

10 rows in set (0.01 sec)

点赞(2) 打赏

Comment list 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部