Приєднується та шукає значення 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');
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.