我最终使用db_query()创建SQL UNION,然后使用theme()函数将其呈现为包括分页器的表布局。
对用户而言,它看起来像默认视图。另一个好处是我可以优化查询很多。我正在显示“我的朋友的活动”,如果您为此使用视图,它将创建您的朋友列表,并在SQL“ IN”子句中使用它,如果您有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();