Anda berada di jalur yang benar. Hanya perlu melakukan perubahan kecil. Kueri berikut akan memberi Anda hasil yang diinginkan. Dalam kueri dalam, dapatkan 4 kolom pertama dan untuk mendapatkan silang peringkat, gabungkan itu ke (SELECT @curRank := 0) r
yang merupakan trik MySQL untuk mendapatkan peringkat. pada akhirnya hanya perlu memesan oleh Cnt untuk membuatnya berfungsi.
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
Untuk memasukkannya ke dalam Tampilan, Anda dapat menggunakan peretasan yang dijelaskan oleh @Gordon-Linoff dalam pertanyaan ini
Kode akhir akan terlihat seperti ini.
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
digunakan untuk mendapatkan 4 kolom pertama yang Anda tetapkan. TestView2
Anda cukup memilih semuanya dari tampilan pertama dan kemudian menambahkan kolom yang memeriksa untuk melihat apakah nilai yang Anda pilih lebih besar atau lebih kecil dari nilai pada contoh pertama tampilan itu.