8

私は mysql の 1 つのクエリで立ち往生しています。

テーブルから最新のコメントを取得したい

  • コメントは、ブログの最新のコメントである必要があります
  • ブログは最新の 3 つのブログである必要があります。
  • ステータスが有効な場合にのみコメントとブログを表示する


ここに画像の説明を入力 ここに画像の説明を入力 ここに画像の説明を入力 レコードは、このテーブルのテーブル構造のようにする必要があります テーブルブログ


  
blog_id int - プライマリ (自動インクリメント)
blog_title -varchar
blog_desc -varchar
ブログ画像 -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_date -日時  
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

このための簡単な解決策は、結果に対して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 に答える
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 に答える
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 つのブログと、各ブログの最新の 1 つのコメント用です。

ここで内部結合を使用すると、最新のブログが取得されます。コメントに参加して日付またはIDで並べ替え、要件に応じて制限するよりも。

于 2013-02-07T10:59:27.297 に答える
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 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 に答える
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 に答える