我使用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;
}
这再次只显示匹配的记录。没有值行的字段不显示。
答案 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