php - 使用 LEFT JOIN 显示不匹配/不存在的行

标签 php mysql join pdo

我在使用 LEFT JOIN 进行 SQL 查询时遇到问题。我有一个自定义字段表和这些字段的值表。我加入表来获取值,但它只显示匹配行中的数据。如果值行不存在,则不显示字段名称。我的目标是显示所有字段,无论它们是否有值,但仍然具有与其字段匹配的现有值。以下是我的查询。

$customfields = $pdo->prepare("SELECT * FROM fields f LEFT JOIN fields_values v ON f.id = v.fieldid WHERE v.related_system=:relsystem ORDER BY f.fieldorder ASC");
$customfields->bindParam(':relsystem', $_GET['id'], PDO::PARAM_STR);
$customfields->execute();
$customfields = $customfields->fetchAll(PDO::FETCH_ASSOC);

查询之后,我有一个 foreach 循环。

foreach ($customfields as $fields) {
    $ftype = $fields['fieldtype'];
    $fname = $fields['fieldname'];
    $fvalue = $fields['value'];

    echo $fname;
    echo $fvalue;
}

这又只显示匹配的记录。没有值行的字段不会显示。

最佳答案

您正在使用 where 条件否定您的外部联接。相反,将其移至加入条件:

SELECT * 
FROM fields f 
    LEFT JOIN fields_values v ON f.id = v.fieldid 
         AND v.related_system=:relsystem 
ORDER BY f.fieldorder

关于php - 使用 LEFT JOIN 显示不匹配/不存在的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38758113/

相关文章:

php - 添加简码时页面未更新,并且在 wordpress 插件开发期间也在 wordpress 仪表板中呈现简码内容

javascript - 在 PHP 中从 JSON 填充选择列表

MYSQL Group 通过返回重复值

sql - Informix 多重连接

javascript - 如何查找蜇伤是否有 "UKV-IVAKVDT4"这个模式

php - "s."和 "n"在此 mysql 语句中是什么意思/做什么?

mysql - 将 JOIN 查询重写为子查询,缺少行?

mysql - Codeigniter 何时从 MYSQL DB 检索数据

mysql - SQL查询: How to use sub-query or AVG function to find number of days between a new entry?

mysql - SQL 左外连接与内连接不等于