Mysql数据查询in的时候如何排序

Mysql数据查询in的时候如何排序,第1张

前几天工作上遇到一个问题,在mysql数据查询的时候,使用的是in条件,而结果需要根据in来进行排序,当时尝试了几次都没成功,后来在度娘的帮助下,找到了解决办法: select * from table_name where id in (6,2,1,10,5,7..) 查询的结果和in中的顺序并不一致,也就是说在批量查询时,mysql的查询并不是按照in中的值得顺序来查询的。那怎么才能保证和in查询中的顺序相同呢? 查询了资料发现有两种方式可以对in查询的结果进行排序。一种是order by find_in_set,另外一种是order by substring_index 1、select * from table_name where id in (6,2,1,10,5,7..) order by find_in_set(id,'6,2,1,10,5,7') 2、select * from table_name where id in (6,2,1,10,5,7..) order by substring_index('6,2,1,10,5,7',id,1)

CREATE TABLE test (

 `user`  varchar(10),

 `fruit`  varchar(10),

 `money`   int

)

 

INSERT INTO test 

SELECT  'user1',  'banana',   60     UNION ALL

SELECT  'user1',  'Apple',   1981       UNION ALL

SELECT  'user1',  'watermelon',   4080       UNION ALL

SELECT  'user1',  'Apple',   622        UNION ALL

SELECT  'user2',  'banana',   122246     UNION ALL

SELECT  'user2',  'Apple',   369        UNION ALL

SELECT  'user2',  'watermelon',   57362      UNION ALL

SELECT  'user3',  'banana',   463        UNION ALL

SELECT  'user3',  'watermelon',   11382      UNION ALL

SELECT  'user3',  'Apple',   966

SELECT

  CASE 

    WHEN @user != test.`user` THEN @rownum:= 1 

    ELSE @rownum:= @rownum + 1  

    END AS No,

  @user := test.`user`  AS   `User`,

  test.`fruit`, 

  test.`money`

FROM

  (SELECT @rownum:=0) r,

  (SELECT @user:='') p,

  test

ORDER BY

  test.`user`,

  test.`money`  DESC

  

因为本机 MySQL  编码问题, 就把  中文给 修改成 英文了。

执行结果如下:

mysql> SELECT

    ->   CASE

    ->     WHEN @user != test.`user` THEN @rownum:= 1

    ->     ELSE @rownum:= @rownum + 1

    ->     END AS No,

    ->   @user := test.`user`  AS   `User`,

    ->   test.`fruit`,

    ->   test.`money`

    -> FROM

    ->   (SELECT @rownum:=0) r,

    ->   (SELECT @user:='') p,

    ->   test

    -> ORDER BY

    ->   test.`user`,

    ->   test.`money`  DESC

    ->   

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

| No   | User  | fruit      | money  |

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

|    1 | user1 | watermelon |   4080 |

|    2 | user1 | Apple      |   1981 |

|    3 | user1 | Apple      |    622 |

|    4 | user1 | banana     |     60 |

|    1 | user2 | banana     | 122246 |

|    2 | user2 | watermelon |  57362 |

|    3 | user2 | Apple      |    369 |

|    1 | user3 | watermelon |  11382 |

|    2 | user3 | Apple      |    966 |

|    3 | user3 | banana     |    463 |

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

10 rows in set (0.00 sec)

mysql>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8472871.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-16
下一篇 2023-04-16

发表评论

登录后才能评论

评论列表(0条)

保存