2016-08-04 3 views
0

LEFT JOIN을 사용하는 SQL 쿼리에 문제가 있습니다. 사용자 정의 필드의 테이블과 해당 필드의 값 테이블이 있습니다. 값을 얻기 위해 테이블을 조인했지만 일치하는 행의 데이터 만 표시합니다. 값 행이 존재하지 않으면 필드 이름이 표시되지 않습니다. 내 목표는 값이 있는지 여부에 관계없이 모든 필드를 표시하는 것이지만 필드에 일치하는 기존 값을 계속 유지하는 것입니다. 아래는 나의 질문입니다. LEFT JOIN으로 일치하지 않는/존재하지 않는 행 표시

$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

귀하는 outer joinwhere 기준을 부인합니다. 대신 join 기준으로 이동하십시오.

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

빠른 응답 감사합니다. 이것은 그것을했다. – CrunchyToast

관련 문제