Byl jsi na správné cestě. Jen bylo potřeba udělat drobné změny. Následující dotaz vám poskytne požadované výsledky. Ve vnitřním dotazu jsem dostal první 4 sloupce a pro získání pořadí se to spojilo s (SELECT @curRank := 0) r
což je MySQL trik pro získání hodnosti. nakonec stačilo objednat u Cnt, aby to fungovalo.
SELECT username
,userid
,category
,Cnt
,@curRank := @curRank + 1 AS rank
FROM (
SELECT b.Username
,B.userid
,A.category
,count(*) Cnt
FROM tblb B
JOIN tbla A
ON B.UserID = A.User
WHERE a.Category = 1
GROUP BY b.username
)a
,(SELECT @curRank := 0) r
Order by cnt desc
Chcete-li to vložit do zobrazení, můžete použít hack popsaný @Gordon-Linoff v této otázce
Koncový kód bude vypadat nějak takto.
CREATE VIEW TestView1
AS
SELECT b.Username
,B.userid
,A.category
,COUNT(*) Cnt
FROM tblb B
JOIN tbla A
ON B.UserID = A.User
WHERE a.Category = 1
GROUP BY b.username
ORDER BY cnt DESC;
CREATE VIEW TestView2
AS
SELECT t1.*
,( SELECT 1 + COUNT(*)
FROM TestView1 AS t2
WHERE t2.Cnt > t1.Cnt
OR (
t2.Cnt = t1.Cnt
AND t2.userid < t1.userid ) ) AS Rank
FROM TestView1 AS t1
TestView1
se používá k získání prvních 4 sloupců, které jste definovali. TestView2
stačí vybrat vše z prvního pohledu a poté přidat sloupec, který zkontroluje, zda je hodnota, kterou vyberete, větší nebo menší než hodnota v prvním případě tohoto pohledu.