Score:4

เป็นไปได้หรือไม่ที่จะมี SELECT ที่ซ้อนกันในส่วนคำสั่ง WHERE โดยใช้การสืบค้นแบบไดนามิก

ธง cn

ฉันต้องดำเนินการแบบสอบถาม SQL นี้โดยใช้แบบสอบถามแบบไดนามิก

ที่ไหน (node_field_data.status = 1) 
และ (node__field_document_places.entity_id IN (เลือก entity_id จาก node__field_document_places โดยที่ field_document_places_target_id = 51673)) 

นี่คือรหัสที่ฉันใช้

$connection = ฐานข้อมูล::getConnection();
$query = $connection->select('node_field_data', 'node_field_data');

$query->condition('node_field_data.status',1);
$query->condition('node__field_document_places.entity_id',[ -- ฉันทำที่นี่ได้ไหม -- ], "IN");

ฉันสามารถเรียกใช้แบบสอบถามแยกต่างหากในทางเทคนิคและใส่รหัสในอาร์เรย์ แต่ฉันหวังว่าจะหลีกเลี่ยงการดำเนินการค้นหาสองรายการที่แตกต่างกัน

มีวิธีการทำเช่นนี้โดยใช้การสืบค้นแบบไดนามิกหรือไม่?

Score:4
ธง cn

ใช่ เป็นไปได้มาก ดูที่ สามารถเพิ่มข้อความค้นหาย่อยลงในเงื่อนไขข้อความค้นหาได้แล้ว บันทึกการเปลี่ยนแปลงสำหรับรายละเอียดทั้งหมด

ตัวอย่างบัญญัติมีความคล้ายคลึงกับของคุณและควรสาธิตวิธีการปรับโครงสร้างโค้ดของคุณใหม่:

// สร้างแบบสอบถามย่อย ซึ่งเป็นเพียงวัตถุแบบสอบถามธรรมดา
$subquery = db_select('ทดสอบ', 't2');
$subquery->addExpression('AVG(t2.age)');

// สร้างแบบสอบถามอื่นที่เพิ่มอนุประโยคโดยใช้แบบสอบถามย่อย
$select = db_select('ทดสอบ', 't');
$select->addField('t', 'ชื่อ');
$select->condition('t.age', $subquery, '<');

อย่าลืมแทนที่เลิกใช้ db_select() กับ $connection->select().

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา