2013-02-07 16 views
8

我被困在一個查詢在mysql中。我被困在一個查詢在mysql中

我想從表

  • 獲取最近期的評論的評論應該是最近的評論的博客
  • 博客應該是最新的3個博客。只有當他們的狀態是啓用

記錄應該像表的表博客這個
enter image description here enter image description here enter image description here 表結構

  • 顯示評論&博客


     
    blog_id int - primary (auto increment) 
    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 ('Enable','Disable') 
    

    爲表表結構blog_comment


     
    comment_id  -int (auto increment) 
    fk_blog_id  -int 
    comment   -varchar 
    comment_by  -varchar 
    email   -varchar 
    comment_date  -datetime 
    comment_status -enum ('Enable','Disable') 
    

    及以下查詢我寫的,但我得到的結果是錯誤的。

    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 
    

    輸出


    enter image description here

  • +1

    +1對於您提出問題的方式;非常乾淨的描述 –

    +0

    @IonutFlaviusPogacian:的確,除了標題是... – Mr47

    +0

    這個羣組的所有結果都從那個博客變成了一個單獨的行;因此,你沒有得到所有評論的列表.. – Luceos

    回答

    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; 
        } 
    } 
    
    +0

    非常感謝,它的工作!非常感謝你。但是你知道如何從一個查詢中得到結果嗎 –

    +0

    你不應該在while循環中放置一個查詢。 這可能會非常危險並且會導致性能下降。 對於第一個查詢的每個結果,您將觸發一個新的查詢。如果第一個查詢返回9個結果,您將執行9個額外的查詢。使用2個查詢不是一種選擇,而是在while循環之外移除第二個查詢,並利用第一個查詢的結果! –

    +0

    @AlpeshTrivedi我會嘗試在單個查詢中做到這一點。如果我成功了,我會在這裏發佈它。 – ripa

    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%確定)

    +0

    感謝您的回覆......但這是我試過的同一個查詢! –

    +0

    我得到錯誤的結果,從這個查詢... :( –

    +0

    我想「AS」是問題。對不起。 – keks

    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 
    

    試試這個

    +0

    謝謝,但這個查詢返回我只有一行數據庫..... –

    +0

    我想頂部3個博客和1個博客上的最新評論 –

    +0

    你去那裏修改 – Techmonk

    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 
    
    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 
    
    +0

    博客表缺少這個查詢... :) –

    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  
    

    個EDITS:

    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和限制他們根據您的要求。

    +0

    謝謝,但這是一個錯誤:#1054 - 'on子句'中的未知列'bl.MAX' #1054 - 'on子句'中的未知列'bl.MAX' –

    +0

    確定讓我編輯它 –

    +0

    @AlpeshTrivedi你有沒有再試過我編輯? –

    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表以獲取適當的博客數據。

    +0

    出錯: - #1051 - 未知表'bc' –

    +0

    修正了它。它在查詢的那部分被稱爲'c'。 – Barmar