0

このコードは現在のカテゴリのタグのみを表示しますが、すべてのタグ(数百)を取得するため、返される結果の数を制限し、それらをランダムにする必要があります。

このクエリでランダムに20件の結果のみを取得するにはどうすればよいですか?

/* Retrieve all tags from posts in selected categories */

$cats = array('beaches','mountains');  // Must be an array even if only one category
$cats_string = "'" . implode($cats,"','") . "'";
$sql = <<<EOSQL
SELECT DISTINCT t.*
FROM $wpdb->posts p
JOIN $wpdb->term_relationships tr ON p.ID = tr.object_id
JOIN $wpdb->term_taxonomy tt ON (tr.term_taxonomy_id = tt.term_taxonomy_id
   AND tt.taxonomy = 'post_tag')
JOIN $wpdb->terms t ON tt.term_id = t.term_id
WHERE
   p.ID IN (
      SELECT p2.ID
      FROM $wpdb->posts p2
      JOIN $wpdb->term_relationships tr2 ON p2.ID = tr2.object_id
      JOIN $wpdb->term_taxonomy tt2 ON (tr2.term_taxonomy_id = tt2.term_taxonomy_id     AND tt2.taxonomy = 'category')
  JOIN $wpdb->terms t2 ON (tt2.term_id = t2.term_id AND t2.name IN ($cats_string))
  WHERE p2.post_type = 'post'
  AND p2.post_status = 'publish'
  AND p2.post_date <= NOW()
  )
  EOSQL;

$terms = $wpdb->get_results($sql);

// print_r($terms);

echo "<br />";
foreach ($terms as $term) {
   echo "ID:$term->term_id NAME:$term->name SLUG:$term->slug<br />";
}

ありがとう

4

1 に答える 1

2

ORDER BY RAND() LIMIT 20テーブルのサイズに応じて、これはまともな時間で実行できます。ロジックを回避する場合の詳細については、こちらを参照してください。order by rand()指定された投稿で提案されているように、他のアプローチは、mysql を使用するのではなく、PHP ですべてのエントリを取得し、20 個のエントリをランダムに選択することです。

于 2012-10-28T11:18:09.113 に答える