Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP MySQL-仅当不为null时才进行内部连接_Php_Mysql_Inner Join - Fatal编程技术网

PHP MySQL-仅当不为null时才进行内部连接

PHP MySQL-仅当不为null时才进行内部连接,php,mysql,inner-join,Php,Mysql,Inner Join,我有一个使用内部联接的mysqli SELECT查询,我注意到一个大问题:它不选择列值为null的行(因为第二个表中不存在null)。这是我的密码: <?php $sql = mysqli_connect(/* CONNECTION */); $query = "SELECT " . "e.EQUIPMENT_ID, " . "e.CUSTOMER_ID, " . "e.DESCRIPTION, " .

我有一个使用内部联接的mysqli SELECT查询,我注意到一个大问题:它不选择列值为null的行(因为第二个表中不存在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”列具有jobsite id(非null)时才返回。丑陋的解决方案是在表“jobsites”中创建一行,其jobsite_id名为“empty”,但如果我可以跳过这一步,我会这样做


只有当e.JOB\u站点不为空时,才有方法加入吗?

您可以在SQL查询中使用
左加入

$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";

如果
jb.JOBSITE\u ID
不匹配,此查询将返回
作业站点名称
空值
设备
表中的
作业站点ID

使用左联接,内部联接将“跳过”不完整的记录(如果联接不能完全完成,则不会显示),就是这样!它与左连接一起工作!非常感谢你!!你很高兴我能帮你,Eric在你回答之前写了一条评论,并告诉我使用left join,就像你说的:就是这样!谢谢你们!