比较两列之间的日期时LEFT JOIN不起作用

时间:2017-09-09 13:57:03

标签: php mysql sql left-join

这里我正在进行驾驶室分配模块,在这里我将解释我的要求,管理员将驾驶室分配给员工。我将这些详细信息存储在cab_allocation分配表中。

  

cab_allocation(表名)

allocationId        from_allocationDate       to_allocationdate       cabId    shiftTiming

1                   2017-09-08                 2017-09-30             CBX100     1
2                   2017-09-08                 2017-09-30             CBX100     2

在此之后我想跟踪这次旅行是否每天都在进行,对于我在trip_details表中存储的跟踪细节

  

trip_details(表名)

id      allocationId   tripDate   startTime   endTime      tripStatus

 1             1       2017-09-08  09:30:00    11:30:00       1
 2             2       2017-09-08  12.10.00    02:30:00       1
 3             1       2017-09-09  12.10.00                   0

昨天(2017-09-08)allocationId 1& 2行程已经完成(tripStatus 1表示已完成),今天(2017-09-09)allocationId 1行程已开始但尚未完成(tripStatus 0表示未完成,如正在进行的行程)和今天(2017-09-09) allocationId 2 trip似乎没有启动,所以trip_details表中没有条目。

  

现在我想要的意思是如何分配在那里我需要基于cab_allocation表的cabId的详细信息,假设今天旅行完成意味着旅行细节不应该显示,假设今天旅行没有完成意味着我想要显示详细信息。 / p>

**我试过这个**

SELECT a.allocationId, a.shiftTiming, a.cabId 
FROM cab_allocation a 
LEFT JOIN trip_details b ON a.allocationId = b.allocationId 
WHERE a.cabId='CBX100' AND b.tripStatus != '1' AND a.from_allocationDate >= '2017-09-09' AND a.to_allocationdate <= '2017-09-09'

但是我没有找到任何结果,但根据我的表结构,我需要像这样输出

    {
"status": "success",
"count": 2,
"data": [
    {
        "allocationId": "1",
        "shiftTiming": "1",
    },
    {
        "allocationId": "2",
        "shiftTiming": "2",
    }
]
}
  

我的更新代码

SELECT a.allocationId, a.date, a.shiftTiming, a.cabId 
FROM cab_allocation a 
LEFT JOIN trip_details b ON a.allocationId = b.allocationId 
WHERE a.cabId='CBX100' AND b.tripStatus != '1' AND a.from_allocationDate <= '2017-09-09' AND
  a.to_allocationdate >= '2017-09-09'

1 个答案:

答案 0 :(得分:0)

首先,您不需要left join。使用inner join。你的意图是过滤。

其次,您的where子句是:

WHERE a.cabId='CBX100' AND b.tripStatus <> '1' AND
      a.from_allocationDate >= '2017-09-09' AND
      a.to_allocationdate <= '2017-09-09'

您有日期的条件。你想要:

WHERE a.cabId='CBX100' AND b.tripStatus <> '1' AND
      a.from_allocationDate <= '2017-09-09' AND
      a.to_allocationdate >= '2017-09-09'

起始日期之前需要