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

时间:2016-08-04 03:41:13

标签: 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;
}

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

1 个答案:

答案 0 :(得分:1)

您使用outer join条件否定了where。而是将其移至join条件:

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