Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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
MySQL左连接-如何处理记录与PHP不匹配的情况_Php_Mysql - Fatal编程技术网

MySQL左连接-如何处理记录与PHP不匹配的情况

MySQL左连接-如何处理记录与PHP不匹配的情况,php,mysql,Php,Mysql,我有一个HTML表,其中填充了从MySQLLEFT JOIN返回的记录 这是可行的,但我需要处理在连接中没有匹配项的记录。目前,HTML表如下图所示,不匹配的单元结果记录位于没有相应程序结果的单元格中 +----------------------------------+--------------------------------------------------+ | program_outcome | unit_outcome

我有一个HTML表,其中填充了从MySQL
LEFT JOIN
返回的记录

这是可行的,但我需要处理在
连接中没有匹配项的记录。目前,HTML表如下图所示,不匹配的单元结果记录位于没有相应程序结果的单元格中

+----------------------------------+--------------------------------------------------+
| program_outcome                  |  unit_outcome                                    |
+----------------------------------+--------------------------------------------------+
|                                  | unit_outcome 5, unit_outcome 7                   |
+----------------------------------+--------------------------------------------------+
| program outcome 1                | unit_outcome 2, unit_outcome 4                   |
+----------------------------------+--------------------------------------------------+
| program outcome 2                | unit_outcome 1, unit_outcome 3, unit_outcome 6   |
+----------------------------------+--------------------------------------------------+
这本身是可以的,但我想在当前空白的program_Output单元格中添加一个类似“No matching program Output”的字符串。我想在我的代码中的PHP中这样做,但不确定如何处理:

$query = "SELECT MAX(unit.unit_pk) AS unit_pk,
       GROUP_CONCAT(CONCAT('<strong>',unit.unit_code,': </strong>', unit_outcome.unit_outcome) SEPARATOR '|') unit_outcomes,
       MAX(program_outcome.program_outcome) program_outcome,
       GROUP_CONCAT(unit_outcome.unit_outcome_pk) unit_outcome_pks, 
       program_outcome.program_outcome_pk,
       program_outcome.program_outcome
FROM unit
LEFT JOIN unit_unit_outcome_lookup
    ON unit_unit_outcome_lookup.unit_fk = unit.unit_pk
LEFT JOIN unit_outcome
    ON unit_outcome.unit_outcome_pk = unit_unit_outcome_lookup.unit_outcome_fk
LEFT JOIN program_outcome_unit_outcome_lookup
    ON program_outcome_unit_outcome_lookup.unit_outcome_fk = unit_outcome.unit_outcome_pk
LEFT JOIN program_outcome
    ON program_outcome.program_outcome_pk = program_outcome_unit_outcome_lookup.program_outcome_fk
GROUP BY program_outcome_pk ORDER BY cast(program_outcome as unsigned) ASC";

$result = $connection->query( $query );

echo "<table width='100%' border='1'><thead><tr><th>Program Outcomes</th><th>Unit Outcomes</th></tr></thead><tbody>";
while ($row = mysqli_fetch_array($result)) {
echo "<tr><td>" . $row['program_outcome'] . "</td><td>" . str_replace('|', '<p>',$row['unit_outcomes']) . "</td></tr>";
}
echo "<tbody></table>";
$query=“选择MAX(unit.unit\u pk)作为unit\u pk,
小组讨论(讨论(“”,单位讨论代码“:”,单位讨论结果。单位讨论结果)分隔符“|”)单位讨论结果,
MAX(程序结果。程序结果)程序结果,
小组讨论(单元讨论结果。单元讨论结果)单元讨论结果,
程序结果。程序结果主键,
计划结果
来自单位
左连接单元\u单元\u结果\u查找
在unit\u unit\u Output\u lookup.unit\u fk=unit.unit\u pk上
左连接单元
关于单位结果。单位结果\u pk=单位结果\u查找。单位结果\u fk
左连接程序\u结果\u单元\u结果\u查找
在程序上\u output\u unit\u output\u lookup.unit\u output\u fk=unit\u output.unit\u output\u pk
左连接程序\u结果
关于program\u output.program\u output\u pk=program\u output\u unit\u output\u lookup.program\u output\u fk
按节目分组\u结果\u主键顺序按演员(节目\u结果为未签名)ASC”;
$result=$connection->query($query);
呼应“项目成果”和“IT成果”;
while($row=mysqli\u fetch\u数组($result)){
回显“$row['program_outcours']”。str_replace(“|”)、“”、$row['unit_outcours']);
}
回声“;

您可以在SQL中使用
IFNULL()
执行此操作

$query=“选择MAX(unit.unit\u pk)作为unit\u pk,
小组讨论(讨论(“”,单位讨论代码“:”,单位讨论结果。单位讨论结果)分隔符“|”)单位讨论结果,
MAX(程序结果。程序结果)程序结果,
小组讨论(单元讨论结果。单元讨论结果)单元讨论结果,
程序结果。程序结果主键,
IFNULL(program_outcome.program_outcome,“无匹配的程序结果”)作为program_outcome
来自单位
左连接单元\u单元\u结果\u查找
在unit\u unit\u Output\u lookup.unit\u fk=unit.unit\u pk上
左连接单元
关于单位结果。单位结果\u pk=单位结果\u查找。单位结果\u fk
左连接程序\u结果\u单元\u结果\u查找
在程序上\u output\u unit\u output\u lookup.unit\u output\u fk=unit\u output.unit\u output\u pk
左连接程序\u结果
关于program\u output.program\u output\u pk=program\u output\u unit\u output\u lookup.program\u output\u fk
按节目分组\u结果\u主键顺序按演员(节目\u结果为未签名)ASC”;

您可以在SQL中使用
IFNULL()
执行此操作

$query=“选择MAX(unit.unit\u pk)作为unit\u pk,
小组讨论(讨论(“”,单位讨论代码“:”,单位讨论结果。单位讨论结果)分隔符“|”)单位讨论结果,
MAX(程序结果。程序结果)程序结果,
小组讨论(单元讨论结果。单元讨论结果)单元讨论结果,
程序结果。程序结果主键,
IFNULL(program_outcome.program_outcome,“无匹配的程序结果”)作为program_outcome
来自单位
左连接单元\u单元\u结果\u查找
在unit\u unit\u Output\u lookup.unit\u fk=unit.unit\u pk上
左连接单元
关于单位结果。单位结果\u pk=单位结果\u查找。单位结果\u fk
左连接程序\u结果\u单元\u结果\u查找
在程序上\u output\u unit\u output\u lookup.unit\u output\u fk=unit\u output.unit\u output\u pk
左连接程序\u结果
关于program\u output.program\u output\u pk=program\u output\u unit\u output\u lookup.program\u output\u fk
按节目分组\u结果\u主键顺序按演员(节目\u结果为未签名)ASC”;

使用php,你可以说如果程序结果为空,然后用你想要的字符串替换。使用php,你可以说如果程序结果为空,然后用你想要的字符串替换。事实上,我只需考虑php方面90秒,就可以轻松地解决它。有趣的是,有时问题看起来比实际情况更严重!您在MySQL中的解决方案更干净!谢谢,事实上,我只需花90秒思考PHP方面的问题,就可以轻松地解决它。有趣的是,有时问题看起来比实际情况更严重!您在MySQL中的解决方案更干净!
$query = "SELECT MAX(unit.unit_pk) AS unit_pk,
       GROUP_CONCAT(CONCAT('<strong>',unit.unit_code,': </strong>', unit_outcome.unit_outcome) SEPARATOR '|') unit_outcomes,
       MAX(program_outcome.program_outcome) program_outcome,
       GROUP_CONCAT(unit_outcome.unit_outcome_pk) unit_outcome_pks, 
       program_outcome.program_outcome_pk,
       IFNULL(program_outcome.program_outcome, 'No matching program outcome.') AS program_outcome
FROM unit
LEFT JOIN unit_unit_outcome_lookup
    ON unit_unit_outcome_lookup.unit_fk = unit.unit_pk
LEFT JOIN unit_outcome
    ON unit_outcome.unit_outcome_pk = unit_unit_outcome_lookup.unit_outcome_fk
LEFT JOIN program_outcome_unit_outcome_lookup
    ON program_outcome_unit_outcome_lookup.unit_outcome_fk = unit_outcome.unit_outcome_pk
LEFT JOIN program_outcome
    ON program_outcome.program_outcome_pk = program_outcome_unit_outcome_lookup.program_outcome_fk
GROUP BY program_outcome_pk ORDER BY cast(program_outcome as unsigned) ASC";