我正在尝试编写一个自定义SQL查询,该查询将创建最新帖子和评论的列表,但我无法直观地了解如何执行此操作。
我可以按日期DESC提取最新评论,我可以按日期DESC提取最新帖子,但如何制作提要/查询以显示它们?
这是我的评论SQL
SELECT comment_id, comment_content, comment_date
FROM wp_comments
WHERE comment_author = 'admin'
ORDER BY comment_date DESC
编辑:更清楚:
对不起,我应该更清楚一点。我希望根据它们出现的日期得到这样的列表:
Wordpress post
wordpress post
wordpress comment
wordpress post
wordpress comment
因此,如果有人对4个月前的帖子发表评论,它仍会显示在此“Feed”的顶部
答案 0 :(得分:1)
要仅根据两个表中的最新时间戳获取列表,您需要使用UNION:
SELECT wc.comment_date AS dt
FROM WP_COMMENTS wc
UNION ALL
SELECT wp.post_date AS dt
FROM WP_POSTS wp
ORDER BY dt
...其中dt
是保存任一表中记录的日期值的列的列别名。
使用UNION ALL
- 因为数据来自两个不同的表,所以没有重复的更改来过滤掉。但这意味着您必须根据数据和数据类型从任一表中获取所需的其他列...
答案 1 :(得分:0)
不需要特殊的mySql,只需在循环中使用query_posts循环和get_comments函数。
<?php query_posts('posts_per_page=10'); while (have_posts()) : the_post(); ?>
<div>
<a href="<?php the_permalink() ?>" title="Permanent Link to <?php the_title_attribute(); ?>"<?php the_title_attribute(); ?></a>
<a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php echo the_title(); ?></a>
<?php
$comments = get_comments();
foreach($comments as $comm) :
echo($comm->comment_author);
echo($comm->comment_content);
endforeach;
?>
</div>
<?php endwhile; ?>
答案 2 :(得分:0)
我认为你最好的选择(并避免使用自定义SQL)将获取最新的X帖子和X评论,循环每个帖子并构建一个数组,将两者合并为一个“最新”数据集;
$comments = get_comments('number=X');
$posts = get_posts('posts_per_page=X');
$most_recent = array();
foreach ($comments as $comment)
$most_recent[strtotime($comment->comment_date_gmt)] = $comment;
foreach ($posts as $post)
$most_recent[strtotime($post->post_date_gmt)] = $post;
unset($comments, $posts);
krsort($most_recent);
$most_recent = array_slice($most_recent, 0, X);
foreach ($most_recent as $post_or_comment) {
$is_post = isset($post_or_comment->post_date_gmt);
// output comments and posts
}
它不太漂亮,但应该这样做。