เข้าร่วมและมองหาค่า 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ค่าไปยังแบบสอบถามหรือไม่

คำตอบ:


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.