选择一行,上方一行和下方一行

时间:2019-10-25 01:38:43

标签: mysql sql database select

我有一个带有值列的表。我需要选择用户选择的行(在前面),上方一行和下方一行,所以:

我的“订单”表行

----------------------------------------------
id   |   price |
----------------------------------------------
1    |  1500.00 | 
2    |  1380.00 |
3    |  1880.00 |
4    |  1900.00 |
5    |  1450.00 |
6    |  1700.00 |

如果此人选择:1450.00,我要带 1450.00 1380.00 1500.00 。是否可以选择此MySql?还是我必须在php中做到这一点?

我现在只有初始查询:

SELECT * FROM `orders`
ORDER BY price;

5 个答案:

答案 0 :(得分:1)

您可以选择最高和最低价格来获取行。让我们尝试以下代码:

SELECT * 
FROM orders A
WHERE A.price = 1450.00
OR A.price = (SELECT MAX(B.price) FROM orders B WHERE B.price < 1450.00)
OR A.price = (SELECT MIN(B.price) FROM orders B WHERE B.price > 1450.00)

答案 1 :(得分:0)

一种方法是使用2条MySQL语句。像这样:

SELECT * FROM `orders` WHERE `price`>=$user_price ORDER BY `price` ASC LIMIT 2

应该为您提供用户选择的价格和上面的行。然后您可以执行

SELECT * FROM `orders` WHERE `price`<$user_price ORDER BY `price` DESC LIMIT 1

哪个应该给您下面的行。

我不确定是否可以组合两个查询,但是如果发现任何问题,我会更新答案:)

答案 2 :(得分:0)

如何获取此信息,请使用max() on < 1450min() on > 1450

select * from test
where price in 
    (select price from test where price = 1450)
        or price in
            (select max(price) from test where price < 1450)
            or price in
                (select min(price) from test where price > 1450)

使用or代替in,以更清洁。

select * from test
where price in (1450, 
   (select max(price) from test where price < 1450),           
         (select min(price) from test where price > 1450))

请参阅dbfiddle

答案 3 :(得分:0)

如果价格唯一,并且您只需要三行:

if __name__ == "__main__":
    root = tk.Tk()
    app = MainApplication(root)
    app.pack(fill="both", expand=True)
    root.mainloop()

您的问题未阐明在这些情况下的处理方法:

  • 当价格小于或等于最低价格时。
  • 当价格大于或等于最高价格时。
  • 当有重复的价格时。

答案 4 :(得分:0)

我认为该查询应该有效

select price 
    from orders
    where price <= (select min(price) from orders where price > 1450.00)
order by price desc
limit 3