PHP MySQL-仅当不为null时才进行内部连接
我有一个使用内部联接的mysqli SELECT查询,我注意到一个大问题:它不选择列值为null的行(因为第二个表中不存在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, " .
<?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,就像你说的:就是这样!谢谢你们!