繁体   English   中英

PHP MySQL-仅在不为null的情况下进行内部联接

[英]PHP MySQL - Inner Join only if not null

我有一个使用内部联接的mysqli SELECT查询,我注意到一个大问题:它不选择条件列值为空的行(因为第二张表中不存在NULL)。 这是我的代码:

<?php

$sql = mysqli_connect(/* CONNECTION */);

$query =    "SELECT " .
            "e.EQUIPMENT_ID, " .
            "e.CUSTOMER_ID, " .
            "e.DESCRIPTION, " .
            "e.LOCATION, " .
            "e.JOB_SITE, " .
            "e.PROJECT_NAME, " .
            "jb.DESCRIPTION AS JOB_SITE_NAME " .
            "FROM equipments e " .
            "INNER JOIN jobsites jb ON jb.JOBSITE_ID = e.JOB_SITE " .
            "WHERE e.CUSTOMER_ID = 1 ".
            "ORDER BY e.EQUIPMENT_ID ASC";

$results = mysqli_query($sql, $query);

if(!isset($data)) $data = array(); $cc = 0;

while($info = mysqli_fetch_array($results, MYSQLI_ASSOC)){

    if(!isset($data[$cc])) $data[$cc] = array();

    ///// FROM TABLE equipments /////
    $data[$cc]['EQUIPMENT_ID'] = $info['EQUIPMENT_ID'];
    $data[$cc]['DESCRIPTION'] = $info['DESCRIPTION'];
    $data[$cc]['LOCATION'] = $info['LOCATION'];
    $data[$cc]['PROJECT_NAME'] = $info['PROJECT_NAME'];
    $data[$cc]['JOB_SITE_ID'] = $info['JOB_SITE'];

    ///// FROM TABLE jobsites /////
    $data[$cc]['JOB_SITE'] = $info['JOB_SITE_NAME'];

    $cc++;
}

print_r($data);

?>

因此,正如我所说,代码仅在“设备”内的“ JOB_SITE”列具有作业现场ID(不为null)时返回值。 丑陋的解决方案是在表“ jobsites”内创建一个名为“ empty”的jobsite_id的行,但是如果我可以跳过它,我会的。

只有e.JOB_SITE不为null时,才可以加入吗?

您可以在SQL查询中使用LEFT JOIN

$query =    "SELECT " .
            "e.EQUIPMENT_ID, " .
            "e.CUSTOMER_ID, " .
            "e.DESCRIPTION, " .
            "e.LOCATION, " .
            "e.JOB_SITE, " .
            "e.PROJECT_NAME, " .
            "jb.DESCRIPTION AS JOB_SITE_NAME " .
            "FROM equipments e " .
            "LEFT JOIN jobsites jb ON jb.JOBSITE_ID = e.JOB_SITE " .
            "WHERE e.CUSTOMER_ID = 1 ".
            "ORDER BY e.EQUIPMENT_ID ASC";

如果equipments表中没有与jb.JOBSITE_ID匹配的row ,则此查询将为JOB_SITE_NAME列返回NULL VALUE

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM