我有一个数据库,其中包含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概念时,它不计算在内。似乎没有检测到“类别”字段或者不理解带有kids
的“niños”字。
我的查询是:
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
表中的charset没有检测到ñ字符有什么问题?
答案 0 :(得分:0)
我认为您的问题不是字符集(尽管可能是另一个问题)。 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;