首先,我知道之前可能会问过问题标题,但我的查询略有不同。我搜索过但我无法找到我要找的东西。如果有人知道此问题,请提供该帖子的链接。
所以我的问题是这个;
这是一个小型预订网站。我有车辆表。在这张表中我有4辆车。沙龙,房地产,MPV,小巴。这些车辆的价值如乘客和行李箱容量等如下;
- Saloon =>乘客= 4 AND luggage_capacity = 5
- 遗产=>乘客= 4 AND luggage_capacity = 8
- MPV =>乘客= 6 AND luggage_capacity = 10
- 小轿车=>乘客= 10 AND luggage_capacity = 30
现在,当访问者输入有多少乘客和多少行李的信息时,Sql查询应返回正确的车辆以获取所提供的信息。
示例:访客选择3名乘客和5名行李。这应该返回SALOON车辆。如果乘客是6并且没有行李MPV应该返回结果等等。
我尝试过以下sql查询,但显示错误的车辆。
SELECT name FROM vehicles WHERE passengers >= $passengers
AND luggage_capacity >= $luggage_capacity
我希望我能解释一下我的意思。任何帮助表示赞赏。
答案 0 :(得分:2)
如果您只想要一辆车,则需要订购和限制:
SELECT name FROM vehicles WHERE passengers >= '$passengers' AND luggage_capacity >= '$luggage_capacity' ORDER BY passengers ASC, luggage_capacity ASC LIMIT 1
答案 1 :(得分:0)
我的猜测是数据库中的各种容量值都存储为字符串而不是数字。您可以使用静默转换在查询中修复此问题:
SELECT name
FROM vehicles
WHERE passengers + 0 >= $passengers AND
luggage_capacity + 0 >= $luggage_capacity;
如果这是问题,最好修复表格:
alter table vehicles modify column passengers int;
alter table vehicles modify column luggage_capacity int;
答案 2 :(得分:0)
您确实为我希望的$passangers
和$luggage_capacity
变量赋予默认值,并且它们是整数。
此查询的结果可能会以错误的顺序为您提供多个结果。你应该按照你想要的方式订购桌子,只选择最小的装配车,如下所示:
SELECT `name` FROM `vehicles` WHERE `passengers` >= $passengers AND `luggage_capacity` >= $luggage_capacity ORDER BY `passengers`, `luggage_capacity` LIMIT 1;
这将首先按乘客的顺序按顺序排列车辆表,然后按行李箱容量排序,选择第一个适合并仅返回,而不是全部。如果未找到结果,则返回空结果集。我测试了查询,就像你问的那样工作。
答案 3 :(得分:0)
# Run from the console
set @p=3;
set @l=5;
select *
from `vehicles`
where `passengers` >= @p and `luggage_capacity` >= @l
order by `passengers`
limit 1;
+----+---------+------------+------------------+
| id | name | passengers | luggage_capacity |
+----+---------+------------+------------------+
| 1 | Saloon | 4 | 5 |
+----+---------+------------+------------------+