可以在MySQL上创建此VIEW吗?问题在于变量。我无法找到解决方法。
CREATE VIEW vw_ranking AS
SELECT rank.ativid_id, rank.user_id, b.nome, rank.quant
FROM
(SELECT user_id, ativid_id, quant,
@ativ_rank := IF(@current_ativ = ativid_id, @ativ_rank + 1, 1) AS ativ_rank,
@current_ativ := ativid_id
FROM (SELECT ativid_id, user_id, COUNT(user_id) as quant FROM tb_registro_ativ
GROUP BY ativid_id, user_id) atividade
ORDER BY ativid_id, quant DESC
) rank INNER JOIN tb_usuarios b ON rank.user_id = b.user_id
WHERE ativ_rank <= 10;
答案 0 :(得分:1)
您无法使用视图创建来定义变量。
来源:https://dev.mysql.com/doc/refman/5.5/en/create-view.html
视图定义受以下限制:
SELECT语句不能在FROM子句中包含子查询。
SELECT语句 不能 引用 系统变量 或 用户定义 变量 强>
在存储的程序中,SELECT语句不能引用程序 参数或局部变量。
SELECT语句不能引用预处理语句参数。
定义中引用的任何表或视图都必须存在。之后 视图已经创建,有可能删除一个表或视图 定义是指。在这种情况下,使用视图会导致 错误。要检查此类问题的视图定义,请使用 CHECK TABLE语句。
我建议你改用存储过程。
答案 1 :(得分:1)
MySQL中的视图受到严重限制。您不能使用变量,也不能在FROM
子句中使用子查询。
您的查询非常复杂。你可以使用SELECT
中的子查询,这通常可以计算排名 - 至少在小表上。在您的情况下,您可能需要一系列视图来完成您想要的任务。