Php MySQL获取查询中的行位置

Php MySQL获取查询中的行位置,php,mysql,sql,Php,Mysql,Sql,这是我思考了几个小时仍然无法得到答案的事情。我想得到行的位置 所以,我有一个mysql表叫做“orders” +-----------------------------+ + id | bid + +-----------------------------+ + 1 | 4.00 + + 2 | 6.00 + + 3 | 5.00 +

这是我思考了几个小时仍然无法得到答案的事情。我想得到行的位置

所以,我有一个mysql表叫做“orders”

+-----------------------------+
+ id | bid                    +
+-----------------------------+
+  1 | 4.00                   +
+  2 | 6.00                   +
+  3 | 5.00                   +                 
+  4 | 4.00                   +
+-----------------------------+
我已经用这个函数获得了行的位置

SELECT p.*, (SELECT count(*) FROM orders WHERE bid > p.bid) AS position FROM orders p
输出是

+-----------------------------+
+ id | bid      | position    +
+-----------------------------+
+  1 |     4.00 | 3           +
+  2 |     6.00 | 1           +
+  3 |     5.00 | 2           +
+  4 |     4.00 | 3           +
+-----------------------------+
请注意,如果值相同,则它们具有相同的位置

所以我现在需要的是一个查询,在这里我选择一个新的出价(表中不存在),并告诉我这个出价将位于哪个位置。它应该是这样的:如果我的新出价是7.00在哪个位置?(回答:1个位置),另一个例子:如果我的新出价是4.00,它将在哪个位置?(答:3个职位)

我希望这是在SQL中完成的。如果这是不可能的,那么我会喜欢一个php的答案

我希望你们能在这方面帮助我,我在过去的几个小时里一直在焦头烂额,没能完成这件事


非常感谢您。

首先,我认为您应该在子查询中添加一个独特的关键字。因为如果我们将
bid=3
添加到表中,您的查询将得到
position=5
。因此,将错过
4

SELECT p.*, 
      (SELECT count(DISTINCT bid)+1 
              FROM orders WHERE bid > p.bid) AS position 
      FROM orders p

现在我们需要知道新的
出价的位置。只需使用子查询:

SELECT count(DISTINCT bid)+1 FROM orders WHERE bid > 4

获取所有不同的出价并附加排名,然后加入它

SELECT t1.*, t2.position
FROM orders t1
LEFT JOIN (
  SELECT bid, @i:=@i+1 AS position
  FROM (
    SELECT DISTINCT bid 
    FROM orders
    ORDER by bid DESC
  ) a, (SELECT @i:=0) b
) t2 ON t1.bid = t2.bid

简单怎么样

SELECT count(*)+1 as position FROM orders WHERE bid > :new_bid

这个解决方案非常适合我,你甚至纠正了我的第一个问题。感谢您的快速回复,并花时间帮助我!