タイトルで述べたように、これは単一のSQLクエリでどのように実現できるのか疑問に思いました。必要なのは、指定された基準に一致するノードテーブルのノードIDだけです。
$node_types = node_get_types(); // or create own object of node types
$query = $types = array();
foreach($node_types AS $type){
$query[] = "(SELECT node.* FROM {node} node WHERE node.status <> 0 AND node.type = '%s' ORDER BY node.nid DESC LIMIT 2)";
$types[] = $type->type;
}
$query = implode(' UNION ', $query);
$result = db_query($query, $types);
$items = '';
while($row = db_fetch_object($result)){
$items[] = l($row->title, 'node/'. $row->nid);
}
print theme_item_list($items);
実行時間:0.002秒
これは、添付ファイルを使用して、ビューで可能です。ただし、これは単一のSQLクエリではありません。
ただし、今後は(ビューGUIを使用するため)保守が容易になります(特に、チームに複数の開発者がいる場合)。