Я в кінцевому підсумку використовував db_query () для створення SQL UNION, а потім перетворював його в макет таблиці, включаючи пейджери, використовуючи функцію тема ().
Для користувача це виглядає як перегляди за замовчуванням. Іншою перевагою було те, що я міг багато оптимізувати запит. Я показую "діяльність мого друга", і якщо ви використовуватимете погляди для цього, це створить список ваших друзів і використає його в пункті "IN" SQL, яке дуже повільно, якщо у вас є більше 50 або 100 записів.
Я міг би звузити цей список друзів лише тим, хто був увійшов на сайт за останні х днів.
Це зразок коду:
// 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();