1

私はあなたが私を助けることができるかもしれない小さなクエリの問題を抱えています。特定のコメントメタを持つ投稿からすべてのコメントを取得しようとしています。これは私がこれまでに持っているものです:

$comments = $wpdb->get_results("SELECT * FROM $wpdb->comments INNER JOIN wp_commentmeta WHERE comment_post_ID = '256' AND comment_approved = '1' AND meta_key = 'bestcomment' AND meta_value = 'yes' ");  ?>
<ul id="bestcomment">
<h2>Best Comment</h2>
<?php
if ( $comments ) : foreach ( (array) $comments as $comment) :
echo  '<li class="recentcomments">' . sprintf(__('%1$s on %2$s'), get_comment_author_link(), '<a href="'. get_comment_link($comment->comment_ID) . '">' . get_the_title($comment->comment_post_ID) . '</a>') . '</li>';
endforeach; endif;?></ul>

この投稿にはコメントを1つだけ含める必要があります。残念ながら、クエリは同じ結果を24回表示しています。したがって、ループに何か問題があるはずです。考え?

4

1 に答える 1

2

ループに問題はありません。問題は、2つのテーブルがリンクされる列を指定しなかったため、クエリがcartesian productCROSS JOIN )を生成することです。

私が与えることができる最速の答えは、ON句のリンク列を定義することです、

$comments = $wpdb->get_results("
SELECT * 
FROM $wpdb->comments a
      INNER JOIN wp_commentmeta b
         ON a.ColumnName = b.Columnname           <== define here
WHERE comment_post_ID = '256' AND 
      comment_approved = '1' AND 
      meta_key = 'bestcomment' AND 
       meta_value = 'yes' ");

ColumnNameテーブルの列の実際の名前に変更するだけです。

詳細についてJOINは、以下の記事をご覧ください。

于 2013-01-15T06:10:15.847 に答える