2016-05-04 9 views
0

i Tisch wie diese erhalten:MySQL - Wie Zeilennummer

tb_bid_test 
+-------------+---------------------+ 
| Field  | Type    | 
+-------------+---------------------+ 
| username | varchar(20)   | 
| poin  | bigint(20)   | 
+-------------+---------------------+ 

dann laufe ich diese Abfrage:

select @r := @r+1 as rank, z.* from(SELECT username, sum(poin) as jumlahPoin FROM `tb_bid_test` GROUP BY username order by jumlahPoin desc limit 3)z, (select @r:= 0)y; 

und das Ergebnis:

+--------+------------+--------------+ 
| rank | username | jumlahPoin | 
+--------+------------+--------------+ 
| 1 |  neo |  500  | 
| 2 |  andhie |  348  | 
| 3 |  john |  123  | 
+--------+------------+--------------+ 

ich mag Holen Sie sich 1 Zeile mit Benutzername andhie, so:

+--------+------------+--------------+ 
| rank | username | jumlahPoin | 
+--------+------------+--------------+ 
| 2 |  andhie|  348  | 
+--------+------------+--------------+ 

oder andere Benutzernamen und erhalten Sie den Rang auch, wenn ich den Code vorher verwenden und where username ='andhie' den Rang immer 1 hinzufügen. Wie erhalten Sie den aktuellen Rang auf der Grundlage ihrer Punkte?

Antwort

0

versuchen, diese Abfrage:

Select * from (select @r := @r+1 as rank, z.* from(SELECT username, sum(poin) as jumlahPoin FROM `tb_bid_test` GROUP BY username order by jumlahPoin desc limit 3)z, (select @r:= 0)y;) where username="andhie" 
+0

Fehler erhalten, weil der ";" nach "y". Nachdem das behoben wurde, funktioniert dieser Code dank – neneo

0

Verwenden verschachtelte Abfrage

SELECT * 
FROM (
     SELECT @r := @r + 1 AS rank, z.* 
     FROM (
       SELECT username, SUM(poin) AS jumlahPoin 
       FROM tb_bid_test 
       GROUP BY username 
       ORDER BY jumlahPoin 
       DESC limit 3 
     ) z, 
     (SELECT @r := 0) y 
    ) tbl 
WHERE username = "andhie" 
+0

Fehler wegen Leerzeichen zwischen "sum (poin)" und ";" nach "y". Nachdem beheben, dass dieser Code funktioniert – neneo

1

Wählen Sie aus Ihrem Ergebnis Benutzernamen mit dem Wert 'andhie'

create table tb_bid_test (username varchar(20),poin bigint(20)); 
insert into tb_bid_test values ('neo',500); 
insert into tb_bid_test values ('andhie',348); 
insert into tb_bid_test values ('john',123); 


select * from (
select 
@r := @r+1 as rank, 
z.* 
from(SELECT username, sum(poin) as jumlahPoin FROM `tb_bid_test` 
GROUP BY username order by jumlahPoin desc limit 3)z, 
(select @r:= 0)y 
) as t where username ='andhie' 

Try the fiddle here

+0

Dank es funktioniert – neneo

+0

Sie sind willkommen..wenn es gelöst, können Sie als Antwort auswählen – tharif