Wordpress查询/循环复制相同的内容24次

时间:2013-01-15 06:04:43

标签: mysql sql wordpress loops

我遇到一个小问题,也许你可以帮助我。我试图从一篇有特定评论元的帖子中获取所有评论。这就是我到目前为止所做的:

$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>

这篇文章应该只有一条评论。不幸的是,查询显示相同的结果24次。所以循环必定有问题。想法?

1 个答案:

答案 0 :(得分:2)

循环没有问题。问题是您的查询生成cartesian product CROSS 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,请查看以下文章