Php MySQL获取查询中的行位置
这是我思考了几个小时仍然无法得到答案的事情。我想得到行的位置 所以,我有一个mysql表叫做“orders”Php MySQL获取查询中的行位置,php,mysql,sql,Php,Mysql,Sql,这是我思考了几个小时仍然无法得到答案的事情。我想得到行的位置 所以,我有一个mysql表叫做“orders” +-----------------------------+ + id | bid + +-----------------------------+ + 1 | 4.00 + + 2 | 6.00 + + 3 | 5.00 +
+-----------------------------+
+ 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
这个解决方案非常适合我,你甚至纠正了我的第一个问题。感谢您的快速回复,并花时间帮助我!