我已经编写了一个 child 文字游戏,现在我正在尝试优化性能。游戏以一种特殊的方式从数据库中挑选关键词,我想做得更好。
给定一个按字母数字排序的 MySQL 关键字字段:
keyword sorting position
apple 1
apricot 2
avocado 3
banana 4
broccoli 5
carrot 6
cherry 7
coconut 8
grape 9
是否有可能(在一个简单的 MySQL 查询中)将它们按连续的字母数字组排序,以便每个组都有首字母与组中其他字母不同的关键字? 预期的结果是这样的:
keywords group alpha sorting position
apple 1
banana 2
carrot 3
grape 4
apricot 1
broccoli 2
cherry 3
avocado 1
coconut 2
我通过编程迭代实现了这一点。我想知道这是否可以在一个简单的 MySQL 查询中完成。
最佳答案
您可以使用变量:
SELECT keyword
FROM (
SELECT keyword,
@rn := @rn + 1 AS rn,
@grp_rn := IF (@grp = LEFT(keyword, 1), @grp_rn + 1,
IF (@grp := LEFT(keyword, 1), 1, 1)) AS grp_rn
FROM mytable
CROSS JOIN (SELECT @rn := 0, @grp_rn := 0, @grp := '') AS var
ORDER BY keyword) AS t
ORDER BY grp_rn, rn
@rn
简单地按照 keyword
升序枚举表记录。 @grp_rn
枚举属于同一 LEFT(keyword, 1)
(即 keyword
)切片的记录。
要更好地理解如何使用 ORDER BY grp_rn, rn
进行排序,您可以查看子查询返回的内容:
keyword, rn, grp_rn
====================
apple, 1, 1
apricot, 2, 2
avocado, 3, 3
banana, 4, 1
broccoli, 5, 2
carrot, 6, 1
cherry, 7, 2
coconut, 8, 3
grape, 9, 1
关于mysql - 如何通过 Alpha 集(a-z,a-z,a-z ...)制作简单的 MySQL Order,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33895379/