php - 如何根据特定条件从2个表中获取数据

标签 php mysql

在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:0106/01/2018年04:02

现在我想显示所选供应商的所有车辆以及车辆表中的座位数

但条件是:

将显示在我的所选日期内有可用座位数的车辆:2018年6月1日02:0106/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

http://sqlfiddle.com/#!9/c6bcb6/15

关于php - 如何根据特定条件从2个表中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50628742/

相关文章:

php - REST 请求中的特殊字符

PHP - 从数据库中显示损坏的图像

mysql - 将 3 个 MySQL 表连接到 1 个查询中

mysql - 从不同的 ID 获取最大日期/时间

mysql - 插入行详细信息(例如用户率平均 SQL)后触发自动平均

javascript - 如何在 WordPress 中使用 AJAX 发送要下载的文件?

php - 如何为从数据库查询数据的选择下拉列表设置标题

php - PHP MySQL 数据库连接保持事件状态多长时间?

php - 使用 PHP 为订单创建不同税费的汇总表

.net - 自动部署 Web 应用程序?