8

我被困在mysql中的一个查询上。

我想从表中获取最新评论

  • 评论应该是博客上的最新评论
  • 博客应该是最新的 3 个博客。
  • 仅在状态为已启用时显示评论和博客

记录应该是这样
在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 的表结构表表博客


  
blog_id int - 主要(自动递增)
blog_title -varchar
blog_desc -varchar
blog_image -varchar
blog_tags -varchar
tot_comments -int
blog_creater -varchar
blog_create_date -datetime
blog_status -enum('启用','禁用')

blog_comment的表结构


comment_id -int(自动递增)  
fk_blog_id -int  
注释 -varchar  
comment_by -varchar  
电子邮件-varchar  
评论日期-日期时间  
comment_status -enum('启用','禁用')

下面是我写的查询,但我得到的结果是错误的。

SELECT b.blog_title,b.blog_image, bc.*
FROM blog_comments  bc, blog b
WHERE bc.comment_status='Enable'
AND b.blog_status='Enable'
AND b.blog_id=bc.fk_blog_id
GROUP BY bc.fk_blog_id    
ORDER BY bc.comment_date DESC 
LIMIT 0,3

输出


在此处输入图像描述

4

7 回答 7

1
SELECT b.blog_title,b.blog_image, bc.*
FROM blog b
left join (
Select * from 
blog_comments bc
WHERE bc.comment_status='Enable'
GROUP BY bc.fk_blog_id    
having max(bc.comment_date) =  bc.comment_date
) bcc on b.blog_id=bcc.fk_blog_id
where
b.blog_status='Enable'
ORDER BY b.blog_create_date desc
LIMIT 0,3

试试这个

于 2013-02-07T10:47:34.933 回答
1

试试这个:

SELECT * FROM blog_comments  bc, blog b
WHERE `bc.comment_status`='Enable'
AND `b.blog_status`='Enable'
AND `b.blog_id`=bc.fk_blog_id
ORDER BY `bc.comment_date` DESC LIMIT 1;

尝试一个更简单的:

SELECT * FROM `blog_comment` WHERE 'blog_status'='Enable' AND 'blog_id'='$blogidherefromtitle' ORDER BY 'comment_date' DESC LIMIT1
于 2013-02-07T10:50:34.263 回答
1

为此,简单的解决方案将为您的结果执行 2 次查询。第一次查询获取博文结果

$db_blog="select blog_id,blog_title from blog where blog_ststus='Enable'";
$que=mysql_query($db_blog); 
while($row=mysql_fetch_object($que))
{
    echo $row->blog_title;
    $db_comment="select comment from blog_comments where fk_blog_id=".$row->blog_id." and comment_status='Enable' order by comment_date desc";
    $quec=mysql_query($db_comment);
    while($comment=mysql_fetch_object($quec))
    {
         echo $comment->comment;
    }
}
于 2013-02-07T11:09:04.780 回答
0

尝试

SELECT b.blog_title,b.blog_image, bc.*
FROM blog_comments AS bc, blog AS b
WHERE bc.comment_status='Enable'
AND b.blog_status='Enable'
AND b.blog_id=bc.fk_blog_id
GROUP BY bc.fk_blog_id    
ORDER BY bc.comment_date DESC 
LIMIT 0,3;

(我不是 100% 确定)

于 2013-02-07T10:46:01.363 回答
0
SELECT b.blog_title,b.blog_image, bc.*
FROM blog_comments  bc JOIN blog b ON bc.fk_blog_id = b.blog_id
WHERE bc.comment_status='Enable'
AND b.blog_status='Enable'
GROUP BY bc.fk_blog_id    
ORDER BY bc.comment_date DESC 
LIMIT 0,3
于 2013-02-07T10:50:20.663 回答
0

试试这个查询

SELECT 
  bc.* 
FROM
  blog AS b 
  INNER JOIN (SELECT id , MAX(id) AS MaxID FROM blog) AS bl ON bl.id = b.id 
  LEFT JOIN blog_comment AS bc ON bc.fk_blog_id = b.id 
ORDER BY bc.comment_id DESC 
LIMIT 3     

编辑:

SELECT 
  bc.* 
FROM
  blog AS b 
  INNER JOIN (SELECT id , MAX(id) AS MaxID FROM blog GROUP BY id) AS bl ON bl.id = b.id 
  INNER JOIN (SELECT MAX(id) , fk_blog_id FROM blog_comment  GROUP BY id) AS bc ON bc.fk_blog_id = b.id 
ORDER BY bc.comment_id DESC 
LIMIT 3

这是针对每个博客的 3 个最新博客和最新单个评论

这里使用内部连接将获取最新的博客。而不是加入评论并使用日期或 ID 对它们进行排序,并根据您的要求对其进行限制。

于 2013-02-07T10:59:27.297 回答
0
select b.blog_title, b.blog_image, bc.*
from blog b join
(select bc.*
 from bc join (select fk_blog_id, max(comment_date) latest_date
               from blog_comment
               where comment_status = 'Enable'
               group by fk_blog_id) latest
 on bc.fk_blog_id = latest.fk_blog_id and bc.comment_date = latest_date) c
on b.blog_id = c.fk_blog_id
where b.blog_status = 'Enable'
order by c.comment_date desc
limit 0, 3

c子查询使用链接问题中的技术为每个博客查找具有最新评论的行。然后将其与blog表连接以获取适当的博客数据。

于 2013-02-07T11:04:14.150 回答