web-dev-qa-db-ja.com

各ノードタイプから最近の2つのノードをプルする単一のSQLクエリ

タイトルで述べたように、これは単一のSQLクエリでどのように実現できるのか疑問に思いました。必要なのは、指定された基準に一致するノードテーブルのノードIDだけです。

4
Sivaji
$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秒

4
dobeerman

これは、添付ファイルを使用して、ビューで可能です。ただし、これは単一のSQLクエリではありません。

ただし、今後は(ビューGUIを使用するため)保守が容易になります(特に、チームに複数の開発者がいる場合)。

0
wiifm