我有一个带有值列的表。我需要选择用户选择的行(在前面),上方一行和下方一行,所以:
我的“订单”表行
----------------------------------------------
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;
答案 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 < 1450
和min() 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