Php 在mysql中使用where子句按降序获取人员的排名

Php 在mysql中使用where子句按降序获取人员的排名,php,mysql,sql,Php,Mysql,Sql,我已经尝试了获取数据:我正在尝试获取名称A的排名,它是4,但我无法做到这一点 SELECT @rownum := @rownum + 1 AS rank, name, vote FROM uservotes, (SELECT @rownum := 0) t ORDER BY vote DESC 在数据表中: create table uservotes(id int, name varchar(50), vote int); INSERT INTO uservotes VALUES (1,

我已经尝试了获取数据:我正在尝试获取名称A的排名,它是4,但我无法做到这一点

SELECT @rownum := @rownum + 1 AS rank, name, vote 
FROM uservotes, (SELECT @rownum := 0) t ORDER BY vote DESC
在数据表中:

create table uservotes(id int, name varchar(50), vote int);

INSERT INTO uservotes VALUES
(1, 'A', 34),
(2, 'B', 80),
(3, 'bA', 30),
(4, 'C', 8),
(5, 'D', 4),
(6, 'E', 14),
(7, 'F', 304),
(8, 'AA', 42),
(9, 'Ab', 6),
(10, 'Aa', 10);
我无法获取where子句。基本上,我想知道基于投票的名称的排名。我尝试了:

SELECT @rownum := @rownum + 1 AS rank, name, vote 
FROM uservotes WHERE name= A , (SELECT @rownum := 0) t ORDER BY vote DESC
但我有一个错误。我真的很感谢任何帮助。提前谢谢

错误:

您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第2行“SELECT@rownum:=0 t ORDER BY VOUTE DESC”附近使用的正确语法:选择@rownum:=@rownum+1作为秩、名、USERVOUTS投票,其中name=A,选择@rownum:=0 t ORDER BY VOUTE DESC

要获得排名:

select rank, name, vote
from (SELECT @rownum := @rownum + 1 AS rank, name, vote 
FROM uservotes, (SELECT @rownum := 0) t ORDER BY vote DESC) z
where name='A';
我试试这个:

SELECT 
    @i:=@i+1 AS rn, 
    t.*
FROM 
    uservotes AS t,
    (SELECT @i:=0) AS tbl
    ORDER BY vote desc
2那么,获取A的特定行很容易:

select * From
(
SELECT 
    @i:=@i+1 AS rn, 
    t.*
FROM 
    uservotes AS t,
    (SELECT @i:=0) AS tbl
ORDER BY vote desc

) x where x.name = 'A'

怎么了?where子句中的A是什么?不,那不对,因为排名变成了1,这是不正确的。这是我面临的问题。那么你的预期结果是什么,你在问题中没有提到任何影响@jason如果A周围缺少引号,就会抛出一个错误。我要指出,where子句位于错误的位置。它应该在子查询表t之后。我不知道你想做什么你的SQLFiddle没有14级,你的小提琴中只有14级是6,'E',14,而且是字母E而不是a。正如D.拉坦辛格所说,我们不知道你想做什么@jasonI正在尝试获取名称A的排名,该排名为4,但我无法做到。我在刚才的问题中更新了该排名。对不起,从uservotes中选择@I:=@I+1作为rn,t.*作为t,从uservotes中选择@I:=0作为tbl,其中name=A ORDER BY vote desc:4@jason不,我的代码给rn加了4。也许你看错了身份证而不是注册护士。看这里。SQL FIDLE中的insert语句看起来很奇怪。慢慢地重播:太棒了,它成功了。你能简单地解释一下t.*和x.name是什么吗?我真的很感激。@jason当然。因此,x是从查询1返回的整个结果集。如您所见,1嵌套在2中。t只是主表uservots中1的别名。“我正在做rownum模拟。”jason看到Peter Johnson在8月12日10点17分26分的回答。基本上我只是根据你的情况修改了它。
SELECT 
    @i:=@i+1 AS rn, 
    t.*
FROM 
    uservotes AS t,
    (SELECT @i:=0) AS tbl
    ORDER BY vote desc
select * From
(
SELECT 
    @i:=@i+1 AS rn, 
    t.*
FROM 
    uservotes AS t,
    (SELECT @i:=0) AS tbl
ORDER BY vote desc

) x where x.name = 'A'