У меня есть таблица ниже. Я не могу создать представление, которое отображает количество записей wrt пользователя и имени пользователя из другой таблицы и рангов, скажем, для категории «1». Как мне создать представление? Я очень ценю любую помощь. Спасибо в Advance.
CREATE TABLE if not exists tblA ( id int(11) NOT NULL auto_increment , user varchar(255), category int(255), PRIMARY KEY (id) ); CREATE TABLE if not exists tblB ( id int(11) NOT NULL auto_increment , username varchar(255), userid int(255), PRIMARY KEY (id) ); INSERT INTO tblA (user, category ) VALUES ('1', '1'), ('1', '2'), ('1', '3'), ('1', '1'), ('2', '1'), ('2', '1'), ('2', '1'), ('2', '1'), ('3', '1'), ('2', '1'), ('4', '1'), ('4', '1'), ('2', '1'); INSERT INTO tblB (userid, username ) VALUES ('1', 'A'), ('2', 'B'), ('3', 'C'), ('4', 'D'), ('5', 'E');
Я пробовал, но не работал:
create view v as SELECT tblB.username, groups.*, @rank:=@rank+1 AS rank FROM (select user, category, count(*) as num from tblA where category=1 group by user, category order by num desc, user) AS groups -- left join: in case if data integrity fails: left join tblB ON groups.user=tblB.userid CROSS JOIN (SELECT @rank:=0) AS init
Результат должен выглядеть следующим образом:
username user category num rank B 2 1 6 1 A 1 1 2 2 D 4 1 2 3 C 3 1 1 4