Mysql 如何编写此条件的查询
我正在为一家旅行社做一个项目。我得把三张桌子合在一起Mysql 如何编写此条件的查询,mysql,Mysql,我正在为一家旅行社做一个项目。我得把三张桌子合在一起 车辆详细信息我存储所有车辆详细信息 rac\u详细信息预订车辆详细信息 车主车主详细信息 预订时,我需要在rac\u details中搜索该日期范围内的可用车辆 $qry=" SELECT `vehicle_details`.*, `owner`.`owner_name`, `owner`.`id` As owner_id, `rac_details`.`from_date`, `rac_details`.`t
我存储所有车辆详细信息车辆详细信息
预订车辆详细信息rac\u详细信息
车主详细信息车主
rac\u details
中搜索该日期范围内的可用车辆
$qry=" SELECT `vehicle_details`.*, `owner`.`owner_name`, `owner`.`id` As owner_id,
`rac_details`.`from_date`, `rac_details`.`to_date`,
`rac_details`.`vehicle_id`
FROM (`vehicle_details`)
LEFT JOIN `rac_details` ON `rac_details`.`vehicle_id`=`vehicle_details`.`id`
AND `rac_details`.`from_date` NOT BETWEEN $from_timestamp AND $to_timestamp
AND `rac_details`.`to_date` NOT BETWEEN $from_timestamp AND $to_timestamp
JOIN `owner` ON `owner`.`id`=`vehicle_details`.`owner_id`
WHERE `vehicle_details`.`model_id` = '$model_id' ";
通过上述查询,我得到了所有车辆的详细信息。当内部连接
rac\U详细信息
时,我无法获取新添加的车辆ie,该车辆ie在rac\U详细信息
中没有记录。
希望有人能帮助我
编辑
例如,我从2月27日到3月3日预订了一张登记号为XX-YY-ZZ的马球票。然后,我需要搜索车辆xx yy zz在那几天是否可用,因为我刚刚在我的rac_详细信息中搜索了我存储预订车辆详细信息的位置。
然后,我们购买了一辆注册号为RR-TT-YY的新车Vento,因此我在我的车辆详细信息表中添加了该车辆,并且在首次预订之前,不会将任何记录添加到rac_详细信息中
如果我写这个查询
当我第一次预订vento时,它不会在列表中显示vento,因为在vento的
rac_details
中没有任何记录我会尝试使用而不是在已预订的车辆中:
"SELECT `vehicle_details`.*, `owner`.`owner_name`, `owner`.`id` As owner_id,
`rac_details`.`from_date`, `rac_details`.`to_date`,
`rac_details`.`vehicle_id`
FROM (`vehicle_details`)
JOIN `owner` ON `owner`.`id`=`vehicle_details`.`owner_id`
WHERE `vehicle_details`.`model_id` = '$model_id'
AND vehicle_details.id NOT IN (
SELECT rac_details.vehicle_id
FROM rac_details
WHERE `rac_details`.`from_date` BETWEEN $from_timestamp AND $to_timestamp
AND `rac_details`.`to_date` BETWEEN $from_timestamp AND $to_timestamp
)"
乍一看,您的SELECT语句似乎非常长且复杂。可以简化吗?任何代码越复杂,调试就越困难。尽可能简化查询,或者选择查询的编写方式可以不同。您确定在预订时已将详细信息保存到rac_详细信息表中吗?rac_详细信息的SELECT查询显示了什么?您需要刷新表格吗?@Borges我只需要获取给定日期范围内可用的车辆列表。我将预订的详细信息保存在表rac\u details
中。问题在于加入查询。否第一次rac_详细信息表将为空。当车辆被预订时,数据将被添加到此中。@LimZ,您写道:“我只需要获取给定日期范围内可用的车辆列表。我将预订的详细信息保存在rac_details表中。”。所有尚未预订的车辆都可以使用,不是吗?因此,在开始时,内部select将为空,因此NOT IN将为您提供所有车辆ID。仅使用select语句调试代码有点困难。您在什么环境中编写数据库?你能提供一个数据库的例子吗?您是否使用JQuery调用select语句?@Borges和Gavriel请在我的question@LimZ,您是否尝试过此查询?怎么了?错误消息?错误的结果?
"SELECT `vehicle_details`.*, `owner`.`owner_name`, `owner`.`id` As owner_id,
`rac_details`.`from_date`, `rac_details`.`to_date`,
`rac_details`.`vehicle_id`
FROM (`vehicle_details`)
JOIN `owner` ON `owner`.`id`=`vehicle_details`.`owner_id`
WHERE `vehicle_details`.`model_id` = '$model_id'
AND vehicle_details.id NOT IN (
SELECT rac_details.vehicle_id
FROM rac_details
WHERE `rac_details`.`from_date` BETWEEN $from_timestamp AND $to_timestamp
AND `rac_details`.`to_date` BETWEEN $from_timestamp AND $to_timestamp
)"