2016-06-03 2 views
1

Возможно ли создать этот просмотр в MySQL? Проблема связана с переменными. Я не могу найти способ обойти это.Невозможно создать VIew на MySQL

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; 

ответ

1

Вы не можете определить переменные с созданием представления.

Источник: https://dev.mysql.com/doc/refman/5.5/en/create-view.html

Определение мнение с учетом следующих ограничений:

Оператор SELECT заявление не может содержать подзапрос в предложении FROM.

ЗЕЬЕСТ не относятся к системных переменных или определяемые пользователем переменных.

В хранимой программе оператор SELECT не может ссылаться на параметры программы или локальные переменные .

Оператор SELECT не может ссылаться на подготовленные параметры оператора.

Любая таблица или вид, упомянутые в определении, должны существовать. После того, как было создано представление , можно отбросить таблицу или представление, к которому относится определение . В этом случае использование результатов просмотра в ошибке . Чтобы проверить определение вида для таких задач, используйте инструкцию CHECK TABLE.

Я предлагаю вам вместо этого использовать хранимую процедуру.

1

Мнения ограничены в MySQL. Вы не можете использовать переменные, и вы не можете использовать подзапросы в предложении FROM.

Ваш запрос довольно сложный. Вы можете использовать подзапросы в SELECT, и это часто позволяет рассчитать ранги - по крайней мере, на небольших таблицах. В вашем случае вам может потребоваться ряд представлений, чтобы выполнить то, что вы хотите.

Смежные вопросы