Am Ende habe ich db_query () verwendet, um die SQL-UNIONs zu erstellen und sie dann mithilfe der theme () -Funktion in ein Tabellenlayout mit Pagern zu rendern.
Für den Benutzer sieht es aus wie Standardansichten. Der andere Vorteil war, dass ich die Abfrage sehr optimieren konnte. Ich zeige "Aktivitäten meines Freundes" und wenn Sie Ansichten dafür verwenden würden, würde dies eine Liste Ihrer Freunde erstellen und diese in einer SQL "IN" -Klausel verwenden, die sehr langsam ist, wenn Sie mehr als 50 oder 100 Datensätze haben.
Ich könnte diese Freundesliste auf diejenigen beschränken, die in den letzten x Tagen auf der Website eingeloggt waren.
Dies ist ein Codebeispiel:
// 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();