在MySQL数据库中,我有3个表,分别称为供应商、车辆和分配表。
车辆表:
vid vehicleName noOfSeat sid
========================================
13 x 10 28
14 x 8 28
15 x 12 28
16 x 14 29
17 x 4 29
18 x 8 30
分配的表
asgid bid sid vid did seatBooked assigned_start assigned_end
============================================================================
56 15 28 13 17 3 06/01/2018 02:01 06/01/2018 04:02
57 15 28 14 15 2 06/01/2018 02:01 06/01/2018 04:02
58 15 28 15 16 3 06/01/2018 02:01 06/01/2018 04:02
在预订页面中,我需要将车辆分配到选定日期,即2018年6月1日02:01到06/01/2018年04:02
现在我想显示所选供应商的所有车辆以及车辆
表中的座位数
但条件是:
将显示在我的所选日期内有可用座位数的车辆:2018年6月1日02:01至06/01/2018年04:02
例如:
必须显示以下车辆及座位数:
vid Mp pf Seat available
===========================
13 7 ( why 7? because on my selected date 3 seats booked)
14 6 ( why 6? because on my selected date 2 seats booked)
15 9 ( why 9? because on my selected date 3 seats booked)
16 14
17 4
18 8
类似于公交车票系统。
我当前的查询:
目前,我正在使用以下查询,但它只是删除了我选择的日期中的那些视频,但这是不正确的,因为正如您所看到的,在我选择的日期几乎没有可用的座位!
// my selected date: From = '$timestart' and To = '$timeend'
foreach ($sid as $key => $value) {
$vehicle->rowQuery("select * from vehicle where vid not in (
select vid from assigned where assigned_start BETWEEN '$timestart' AND '$timeend' AND assigned_end BETWEEN '$timestart' AND '$timeend' ) AND sid = $value ");
}
我无法想象如何解决它:=(
非常感谢您的帮助。
最佳答案
你可以这样做:
select vehicle.*, (noOfSeat -
(select sum(seatBooked)
from assigned
where sid = 28
and (assigned_start between '2018-01-06 02:01' and '2018-01-06 04:02' )
and (assigned_end between '2018-01-06 02:01' and '2018-01-06 04:02')
)) as seatsAvailable
from vehicle
having seatsAvailable > 0
关于php - 如何根据特定条件从2个表中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50628742/