Skończyło się to na użyciu komendy db_query () do utworzenia SQL UNION, a następnie renderowaniu jej do układu tabeli, w tym pagerów przy użyciu funkcji theme ().
Dla użytkownika wygląda to jak domyślne widoki. Inną korzyścią było to, że mogłem bardzo zoptymalizować zapytanie. Pokazuję „działania mojego przyjaciela”, a jeśli użyjesz do tego widoków, utworzysz listę znajomych i użyjesz go w klauzuli „IN” SQL, która jest bardzo wolna, jeśli masz więcej niż 50 lub 100 rekordów.
Mógłbym zawęzić listę znajomych tylko do tych, którzy byli zalogowani na stronie w ciągu ostatnich x dni.
To jest przykładowy kod:
// 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();