Php 从没有唯一列的表中检索第二最高点

Php 从没有唯一列的表中检索第二最高点,php,mysql,sql,Php,Mysql,Sql,我有一个名为users的表。在这个表中,有一列名为creditsnot unique。 现在,我想第二高的用户帐户的用户信用。如果credits字段是唯一的,则My below查询工作正常 SELECT * FROM users ORDER BY credits DESC LIMIT 1 , 1 但是,如果用户信用不是唯一的,那么它会给检索数据带来问题 假设 当我有这种类型的记录时,在这个查询的输出中,我希望岩石记录不是杰克 有人能帮我找出正确的数值吗 提前感谢希望这有助于首先获得第二高的积分

我有一个名为users的表。在这个表中,有一列名为creditsnot unique。 现在,我想第二高的用户帐户的用户信用。如果credits字段是唯一的,则My below查询工作正常

SELECT * FROM users ORDER BY credits DESC LIMIT 1 , 1
但是,如果用户信用不是唯一的,那么它会给检索数据带来问题 假设

当我有这种类型的记录时,在这个查询的输出中,我希望岩石记录不是杰克

有人能帮我找出正确的数值吗

提前感谢

希望这有助于首先获得第二高的积分,然后找到拥有这些积分的用户,并从顶部选择一个。这将检索一个拥有第二高信用的用户:

编辑:如果您还希望在具有相同分数的用户中进行选择,然后使用适当的筛选/排序条件,例如,要在rock和jenni之间选择rock,您可以基于名称进行另一种排序,假设名称是具有名称的列

     SELECT * FROM users
     WHERE credits = (SELECT distinct credits FROM users 
                   ORDER BY credits DESC LIMIT 1,1)
     ORDER name desc 
     LIMIT 1;
要同时获得rock和jenni,只需从末端移除限制并更新内部限制,例如:

     SELECT * FROM users
     WHERE credits = (SELECT distinct credits FROM users 
                   ORDER BY credits DESC LIMIT 1, 1);
试试这个

Select * FROM users 
Where Credits < (Select Max(Credits) From Users)
ORDER BY credits DESC LIMIT 1;

是的。。它的工作很好,但仍然有问题麦克有200学分杰克有200学分岩石有150学分杰尼有150学分然后从你的查询输出它显示我杰尼的记录。。。你能告诉我如何获得摇滚乐唱片,或者杰尼和摇滚乐唱片都有单曲吗query@deckjohn:这就是我提到的原因,一个用户:。请参考此特定数据场景的更新答案。如果不起作用,请告诉我。子查询是否会返回多行并失败?@Abhilash:是的,我已经意识到,并更新了答案。在以前的回答中,我本应该在中使用,但我认为现在可以了。@deckjohn:请参考更新后的答案。通过在内部查询中使用LIMIT 1,1,查询变得简单多了。如果还有另一个条目,比如sack也有150个积分,该怎么办?你想要石头还是麻袋?还是没关系?我想让stack和rock唱片都有一个queryits完美地工作。。。这就是我想要的谢谢约翰,等等。事实上,这并不管用。尝试四张唱片:300200150,150@Abhilash如果是这样的话,200美元将是第二高。用户想要的是第二高的权利?我知道。但是显示的结果集是:200150150。试试200,200,150,120。结果集是150120。不是问什么…我检查了所有的案例,比如第一个300,200,150,150,第二个300300570505050500第三个7107105705050500在所有上述案例中,它的工作完美。。。我没有一个问题。谢谢john Woo这一个是第二高的记录
     SELECT * FROM users
     WHERE credits = (SELECT distinct credits FROM users 
                   ORDER BY credits DESC LIMIT 1, 1);
SELECT  a.*
FROM    users a
        INNER JOIN
        (
            SELECT DISTINCT credits
            FROM users
            ORDER BY credits desc
            LIMIT 1,1
        ) b ON a.credits = b.credits
Select * FROM users 
Where Credits < (Select Max(Credits) From Users)
ORDER BY credits DESC LIMIT 1;