ฉันลงเอยด้วยการใช้ db_query () เพื่อสร้าง SQL UNIONs จากนั้นแสดงผลเป็นเค้าโครงตารางรวมถึงวิทยุติดตามตัวที่ใช้ฟังก์ชัน theme ()
สำหรับผู้ใช้ดูเหมือนกับมุมมองเริ่มต้น ประโยชน์อื่น ๆ คือฉันสามารถเพิ่มประสิทธิภาพการค้นหาได้มาก ฉันกำลังแสดง "กิจกรรมของเพื่อนของฉัน" และถ้าคุณจะใช้มุมมองเพื่อที่จะสร้างรายชื่อเพื่อนของคุณและใช้มันในประโยค "IN" ของ SQL ซึ่งช้ามากถ้าคุณมีมากกว่า 50 หรือ 100 บันทึก
ฉันสามารถ จำกัด รายชื่อเพื่อนให้แคบลงได้เฉพาะคนที่เข้าสู่ระบบของเว็บไซต์ในช่วง x วันที่ผ่านมา
นี่คือตัวอย่างโค้ด:
// Two queries are required (friendships can be represented in 2 ways in the
// same table). No point making two db calls though so a UNION it is.
// Build up the first query.
$query = db_select('flag_friend', 'f')
->condition('f.uid', $account->uid)
->condition('u.login', $timestamp, '>');
$query->addExpression('f.friend_uid', 'uid');
$query->innerJoin('users', 'u', 'u.uid = f.friend_uid');
// Build up the second query.
$query2 = db_select('flag_friend', 'f')
->condition('f.friend_uid', $account->uid)
->condition('u.login', $timestamp, '>');
$query2->addExpression('f.uid', 'uid');
$query2->innerJoin('users', 'u', 'u.uid = f.uid');
// Return the results of the UNIONed queries.
return $query->union($query2)->execute()->fetchCol();