我以逗号分隔的格式存储数据,我想运行一个查询,以便用户按列中的第二个值排序。
对于这个示例数据:
user | Data
________________________________________
player1 | 45471,2529,32196008193896,99
admin | 1136,2595,17760808279311,95
gamer | 13495,2432,32196008193896,98
________________________________________
顺序为 (2595-2529-2432),即 admin => player1 => gamer。
最佳答案
正如我在评论中提到的,您确实应该尽量避免存储这样的分隔列表。
但是,您可以使用 SUBSTRING_INDEX() 编写查询来解析第二个值。功能。该函数接受一个字符串、分隔符和一个整数,无论是否从分隔符的左/右取以及取多少。换句话说,要获取第二个逗号剩下的所有内容,它看起来像这样:
SELECT SUBSTRING_INDEX(data, ',', 2)
FROM myTable;
然后,您希望该字符串中的所有内容都位于第一个逗号的右侧,因此您必须嵌套函数。 (请注意,这可能会降低效率,但这就是分隔列表的缺点):
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(data, ',', 2), ',', -1)
FROM myTable;
然后,您可以按该值进行排序:
SELECT *
FROM myTable
ORDER BY SUBSTRING_INDEX(SUBSTRING_INDEX(data, ',', 2), ',', -1) DESC;
这是一个SQL Fiddle示例。
关于mysql - 按逗号分隔列表的特定索引排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31058237/