Mysql Query具有多个查询功能

时间:2016-01-31 16:20:22

标签: php mysql

首先,我知道之前可能会问过问题标题,但我的查询略有不同。我搜索过但我无法找到我要找的东西。如果有人知道此问题,请提供该帖子的链接。

所以我的问题是这个;

这是一个小型预订网站。我有车辆表。在这张表中我有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

我希望我能解释一下我的意思。任何帮助表示赞赏。

4 个答案:

答案 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 |
+----+---------+------------+------------------+