2016-05-04 4 views
0

У меня есть таблица вроде этого:MySQL - Как получить строки номер

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

тогда я запустить этот запрос:

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; 

и результат:

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

я хочу получите 1 строку с именем пользователя иhie, например:

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

или другое имя пользователя и получить оценку тоже, если я использую код до и добавить where username ='andhie' ранг всегда 1. Как получить текущий ранг на основе их очков?

ответ

0

попробовать этот запрос:

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

получить ошибку из-за ";" после "y". После исправления, этот код работает, спасибо – neneo

0

Используйте вложенный запрос

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

получить ошибку из-за пространства между «sum (poin)» и «;» после "y". После исправления, что этот код работает, спасибо – neneo

1

Выберите из результирующего пользователя со значением '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

спасибо, что он работает – neneo

+0

приветствуется .. если он разрешен, вы можете выбрать ответ – tharif

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