【问题标题】:LEFT JOIN (Join query not working properly while connecting two tables)LEFT JOIN(连接两个表时连接查询不能正常工作)
【发布时间】:2017-08-16 10:33:28
【问题描述】:

我在这里做出租车分配模块,在这里我将解释我的要求,管理员按班次将出租车分配给员工。这个细节我存储在cab_allocation分配表中。

cab_allocation(表名)

allocationId          cabId    shiftTiming    from_allocationDate  to_allocationdate
1                     CBX100     1             2017-08-10             2017-08-20  
2                     CBX100     2             2017-08-10             2017-08-20
3                     CBX101     3             2017-08-10             2017-08-20

这里 cabId CBX100 每天有两次分配,CBX101 每天有一次分配。在此之后,我想跟踪这次旅行是否发生,对于这个跟踪详细信息,我存储在 trip_details 表中

trip_details(表名)

tripId    cabNo    shiftId   tripDate   startTime   endTime    tripStatus

 1       CBX100      1       2017-08-16  09:30:00    11:30:00       1
 2       CBX100      2       2017-08-16  12.10.00                   0

这里的cabId CBX100已经完成了他的shiftId 1,shiftId开始时间是09:30:00,结束时间是11:30:00,tripStatus 1表示这次行程完成强>。

下一个cabId CBX100已经开始第二班,开始时间是12.10.00,但是这次行程没有完成所以没有结束时间和行程状态

下一个cabId CBX101还没有开始他的行程,所以没有条目是这个表,

现在我的预期结果是行程不完整,我想详细了解出租车分配。这里 cab_allocation 表 allocationId 我正在使用 trip_details 表 tripId 的 forien 键。

我试过这样

    $sql = "SELECT a.allocationId, a.date, a.shiftTiming, a.cabId FROM cab_allocation as a INNER JOIN trip_details as b ON a.allocationId = b.tripId where b.tripStatus != '1' and b.tripDate != '".$date."' UNION SELECT a.allocationId, a.date, a.shiftTiming, a.cabId FROM cab_allocation as a LEFT JOIN trip_details as b ON a.allocationId = b.tripId where b.tripId IS NULL";

  $mysql = mysql_query($sql);
  $count =mysql_num_rows($mysql);
  if($count > 0){
      while ($row = mysql_fetch_assoc($mysql)) {

        $data[] = $row;

      }
  $arrayName = array('status' => 'success', 'count' => $count, 'data' =>$data);
  echo json_encode($arrayName);
 } else {
    $arrayName = array('status' => 'error', 'data' =>'Data not found' );
    echo json_encode($arrayName);
 }

我正在获得结果

{
"status": "success",
"count": 2,
"data": [
    {
        "allocationId": "2",
        "date": "2017-08-12",
        "shiftTiming": "2",
        "cabId": "CBX100"
    },
    {
        "allocationId": "3",
        "date": "2017-08-12",
        "shiftTiming": "3",
        "cabId": "CBX101"
    }
]
}

到目前为止,工作正常,在此之后我必须再添加一个条件,即日期期间检查
cabId -->CBX100 仅分配 10 天,时间段为 2017-08-10 INTO 2017 -08-20,驾驶室分配表中的这个细节,想像假设今天日期2017-08-09意味着不应该显示驾驶室分配细节并且假设今天日期是2017-08-21那个时间也不应该显示驾驶室分配细节,这次我们必须显示 {"status":"error","data":"Data not found"}

我必须检查的这个条件(比如如何在我的查询中添加这个条件)

【问题讨论】:

  • @Nawin,请检查我的预期结果,添加日期条件时我没有得到预期结果,如果知道意味着发布您的答案
  • 你为什么要加入 allocate_id 和 trip_id?
  • @Moiz Arif,在分配表中,我存储了分配详细信息,例如,截至该日期(2017-08-2017),这辆出租车(CBX100)被分配到这个班次(1)。所以他每天必须完成他的旅行,所以这次旅行完成细节我是trip_details表中的字符串。我在这里加入两个表分配id是trip_details中tripId的外键
  • 在 cabId 和 canNo 上进行左连接,它会起作用
  • @Moiz Arif 请更新你的答案

标签: php mysql json join


【解决方案1】:

检查并更新..

$date = "2017-08-16";
$sql = "SELECT a.allocationId, a.date, a.shiftTiming, a.cabId FROM cab_allocation as a INNER JOIN trip_details as b ON a.allocationId = b.tripId where b.tripStatus != 1 and b.tripDate != '".$date."' UNION SELECT a.allocationId, a.date, a.shiftTiming, a.cabId FROM cab_allocation as a LEFT JOIN trip_details as b ON a.allocationId = b.tripId where b.tripId IS NULL";

【讨论】:

  • 我试过你的代码我得到 {"status":"error","data":"Data not found"},请注意我的 trip_details 表中的一件事现在没有数据,想像到目前为止还没有开始旅行,实际结果应该像分配表中应该有多少个位置一样
  • b.tripStatus != '1',我在单引号内给出意味着它工作正常,从这里我必须给出日期条件,这也是我的问题。
  • 请检查我的评论并更新您的代码的日期条件
  • 我需要这样的日期条件,b.tripDate 不等于,到今天意味着我想显示基于 cabId 的分配表中的所有分配
  • @Mr Moiz Arif,我已经写了这个日期条件,对我来说,请从那里查看我的分配表(页面顶部),我从那里得到 from_allocationDate 和 to_allocationdate,在此期间只有这个功能功能应该工作,假设今天日期不在此期间意味着结果应该 {"status":"error","data":"Data not found"}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
  • 1970-01-01
  • 1970-01-01
  • 2015-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多