조인 및 NULL 값 찾기


19

플래그 모듈을 사용하여 사용자가이 사이트에서 작동하는 방식과 유사하게 질문을 해결 된 것으로 표시 할 수 있습니다. 따라서 사용자가 게시물을 필터링하여 해결되지 않은 질문 만 표시하도록하고 싶습니다. 또한 일부 게시물은 전혀 질문이 아닐 수 있습니다. 따라서 "해결 된"플래그를 가질 수 없지만 해결되지 않은 질문으로 만 필터링 할 때 결과에 ​​나타나지 않아야합니다. 따라서, 나는이 다른 사람과 노드 테이블에 가입해야 flag_content하고 field_data_field_question(이 후자의 표는 게시물 질문인지 여부를 알 것입니다).

현재 시도중인 코드는 다음과 같습니다.

$query->join('flag_content', 'f', 'f.content_id = n.nid AND f.content_type = "node" AND f.fid = 5');
$query->join('field_data_field_question', 'q', 'q.entity_id = n.nid AND q.field_question_value = 1');
$query->condition('f.fid', 'NULL', 'IS');
$query->condition('q.field_question_value', 'NULL', 'IS NOT');

그러나 이로 인해 다음 오류가 발생합니다.

PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''NULL') AND (q.field_question_value IS NOT 'NULL')
LIMIT 21 OFFSET 0' at line 4: SELECT n.nid AS nid
FROM
{node} n
INNER JOIN {field_data_field_category} t ON t.entity_id = n.nid
INNER JOIN {flag_content} f ON f.content_id = n.nid AND f.content_type = "node" AND f.fid = 5 
INNER JOIN {field_data_field_question} q ON q.entity_id = n.nid AND q.field_question_value = 1
WHERE (t.field_category_tid = :db_condition_placeholder_0) AND (f.fid IS :db_condition_placeholder_1) AND (q.field_question_value IS NOT :db_condition_placeholder_2)
LIMIT 21 OFFSET 0; Array 
( [:db_condition_placeholder_0] => 464 [:db_condition_placeholder_1] => NULL [:db_condition_placeholder_2] => NULL
)
in queryExecuteRender_recentActivity() (line 57 of someFile.php).

이것이 NULL쿼리에 값 을 전달하는 올바른 방법이 아닙니까?

답변:


31

데이터베이스 API에는 실제로이 유형의 표현식, 즉 SelectQuery::isNull()SelectQuery::isNotNull()함수 를 추가하는 선호되는 방법이 있습니다 . 다음과 같이 사용할 수 있습니다.

$query->isNull('f.fid');

$query->isNotNull('q.field_question_value');
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.