我有一个 CHARSET=latin1 COLLATE=latin1_spanish_ci 的数据库,MySQL 中的这个表名为 category
category name time
niños kid1 0:13:00
niños kid2 0:24:00
niños kid3 0:17:00
niños kid4 0:23:00
当尝试应用 row_number 概念时,它不算数。似乎没有检测到“类别”字段,或者不理解“niños”一词的意思是kids
。
我的查询是:
SELECT
@catPos := IF (@cat = x.`category`, @catPos + 1, 1) AS 'position',
@cat := x.`category`,
x.* FROM (
SELECT category, name, time FROM category
ORDER BY category, time ASC
)x, (SELECT @catPos:=1)a, (SELECT @cat:='')b;
在此示例下,给定的结果是:
position category name time
1 niños kid1 0:13:00
1 niños kid3 0:17:00
1 niños kid4 0:23:00
1 niños kid2 0:24:00
预期结果应该是
position category name time
1 niños kid1 0:13:00
2 niños kid3 0:17:00
3 niños kid4 0:23:00
4 niños kid2 0:24:00
表中的字符集有什么问题没有检测到 ñ 字符吗?
最佳答案
我不认为你的问题是字符集(尽管它可能是另一个问题)。 MySQL 不保证 select 子句中表达式的计算顺序。因此,变量赋值可以按任何顺序。
我推荐:
SELECT c.*,
(@rn := if(@c = c.category, @rn + 1,
if(@c := c.category, 1, 1)
)
) as position
FROM category c CROSS JOIN
(SELECT @c := '' COLLATE latin1_spanish_ci, @rn := 0) params
ORDER BY category, time ASC;
关于MySQL Ñ 拉丁字符(当行号适用时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40208550/