Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用ORDER BY查找SQL/MySQL中的行_Mysql_Sql_Row_Sql Order By - Fatal编程技术网

如何使用ORDER BY查找SQL/MySQL中的行

如何使用ORDER BY查找SQL/MySQL中的行,mysql,sql,row,sql-order-by,Mysql,Sql,Row,Sql Order By,我有一个桌子使用者 我有SQL查询 SELECT * FROM user ORDER BY poin 看起来数据序列是基于点的 但我需要的是这样的数据例如,我是user1: Position 1 : user6 - 85 point Position 2 : user3 - 80 point Position 3 : user4 - 60 point 你的位置是5:user1-20分 使现代化 我使用这个sql 选择x.name, x、 位置 从选择t.user, @rownum:

我有一个桌子使用者

我有SQL查询

SELECT * 
FROM user 
ORDER BY poin
看起来数据序列是基于点的

但我需要的是这样的数据例如,我是user1:

Position 1 : user6 - 85 point 
Position 2 : user3 - 80 point 
Position 3 : user4 - 60 point 
你的位置是5:user1-20分

使现代化 我使用这个sql

选择x.name, x、 位置 从选择t.user, @rownum:=@rownum+1作为位置 来自用户t 加入选择@rownum:=0 r 由t.poin DESC x订购 其中x.user='user1'

按点描述从用户订单中选择*

希望这有帮助

SELECT * FROM user ORDER BY poin DESC
ORDER BY关键字用于按指定列对结果集进行排序

ORDER BY关键字默认情况下按升序对记录进行排序

如果要按降序对记录进行排序,可以使用DESC关键字

SQL按语法排序
这将给出user1的当前排名:

这个查询的一个小问题是,如果另一个用户有相同的分数,它将被分配相同的排名-无论它是否正确,这是值得怀疑的

如果只想为每个用户添加排名,请使用以下命令:

SELECT
    @rank:=@rank+1 AS rank,
    name,
    poin
FROM user,
    (SELECT @rank:=0) r
ORDER BY poin DESC
您可以使用此查询的微小变化来获得单个用户的排名,但避免出现相同排名不明确的问题:

SELECT *
FROM (
    SELECT
        @rank:=@rank+1 AS rank,
        name,
        poin
    FROM user,
        (SELECT @rank:=0) r
    ORDER BY poin DESC
) x
WHERE name = 'user1'
以下代码:

SELECT count(*) AS rank 
FROM user 
WHERE poin >= (SELECT poin FROM user  WHERE name = 'user1')

当is在不同的行中有双点时出现问题。

fauzi想要的是“订单依据”的位置而不是描述。我真的不明白这个答案对用户有什么帮助。我知道问题是他想订购用户,我想他使用了位置。例如,如果我理解正确,OP需要用户当前的位置排名。您的查询根本不存在it@johannes:是这样吗?您的代码表明您了解查询和所有信息。所以dint对mvp的回应做出了解释。。我用你的第一选择。但是当有一个等于User1的点值时,有一个小问题。我该怎么解决这个问题。。thx在……之前:我已经更新了我的答案,给了一个选项,以禁用联系-所有用户将有独特的排名,即使他们有相同的分数伟大。。这项工作。为什么我不想做这样的多个查询:p。。。。好的,非常感谢@mvp。。你的伴侣帮助;谢谢您提供的解决方案,但我不能使用它,因为它必须处理所有数据以获取解决方案谢谢您,但我不能使用它,因为它必须处理所有数据以获取解决方案rank@a.fauzi很高兴听到这个消息。如果这是帮助你并给你带来奇迹的答案,那么只需点击左上角向下至-1滚动条的右/勾号,这样其他用户就可以在短时间内找到它,如果他们想寻找准确或相关的答案的话。
SELECT  Name, 
        Poin, 
        @rowNum := @rowNum + 1 AS position
FROM    user
JOIN    (SELECT @rowNum := 0) r
ORDER BY poin;
SELECT count(*) AS rank
FROM user
WHERE poin >= (SELECT poin FROM user WHERE name = 'user1')
SELECT
    @rank:=@rank+1 AS rank,
    name,
    poin
FROM user,
    (SELECT @rank:=0) r
ORDER BY poin DESC
SELECT *
FROM (
    SELECT
        @rank:=@rank+1 AS rank,
        name,
        poin
    FROM user,
        (SELECT @rank:=0) r
    ORDER BY poin DESC
) x
WHERE name = 'user1'
SELECT count(*) AS rank 
FROM user 
WHERE poin >= (SELECT poin FROM user  WHERE name = 'user1')