Tham gia và tìm kiếm các giá trị NULL


19

Tôi đang sử dụng mô-đun cờ để cho phép người dùng đánh dấu các câu hỏi của họ là đã được giải quyết, tương tự như cách thức hoạt động trên trang web này. Do đó, tôi muốn cho phép người dùng lọc các bài đăng để chỉ hiển thị các câu hỏi chưa được giải quyết. Ngoài ra, một số bài viết có thể không phải là câu hỏi ở tất cả. Do đó, họ không thể có cờ "đã giải quyết", nhưng họ cũng KHÔNG nên xuất hiện trong kết quả khi chỉ lọc bằng các câu hỏi chưa được giải quyết. Do đó, tôi cần tham gia bảng nút với hai người khác: flag_contentfield_data_field_question(bảng sau này là những gì cho biết một bài đăng có phải là một câu hỏi hay không).

Đây là mã hiện tại tôi đang thử:

$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');

Tuy nhiên, điều này dẫn đến lỗi sau:

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).

Đây có phải là cách chính xác để chuyển NULLcác giá trị vào một truy vấn không?

Câu trả lời:


31

API cơ sở dữ liệu thực sự có một cách ưa thích để thêm các biểu thức của loại này, cụ thể là SelectQuery::isNull()và các SelectQuery::isNotNull()hàm. Bạn có thể sử dụng chúng như thế này:

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

$query->isNotNull('q.field_question_value');
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.