我在使用 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/