2013-04-25 69 views
0

我試圖將3個MySQL查詢合併爲一個。MySQL將3個查詢合併爲1個

這是我使用的抓住我的新聞條目(帶分頁)是什麼:

SELECT A.sid, 
     A.title, 
     A.time, 
     A.bodytext, 
     A.author, 
     A.url 
FROM news A 
INNER JOIN 
    (SELECT sid 
    FROM news 
    WHERE approved=1 
    ORDER BY sid DESC LIMIT $start, $limit) B USING (sid) 

現在,我最近加入了評論功能,並希望得到的意見總額爲每個「 sid「

我感到困惑的部分是我需要匹配」sid「(來自news.news)和」page_id「(來自comments.pages)以獲取它獨特的」id「。

+----+---------+ 
| id | page_id | 
+----+---------+ 
| 1 |  87 | 
| 2 |  86 | 
| 41 |  85 | 
| 3 |  84 | 
| 13 |  83 | 
+----+---------+ 

現在用的是獨特的 「身份證」,我需要查詢 「comments.comments」,並以 「PAGE_ID」 列匹配它和count(*)有多少評論有 - WHERE is_approved = 1

SELECT page_id,is_approved,count(*) FROM comments WHERE page_id = $id and is_approved = 1; 
+---------+-------------+----------+ 
| page_id | is_approved | count(*) | 
+---------+-------------+----------+ 
|  1 |   1 |  2 | 
+---------+-------------+----------+ 

這可能嗎?

+0

您還沒有表現出你的所有表。 – 2013-04-25 03:32:52

+0

修改了我的帖子 - 那是你需要的嗎? – 2013-04-25 04:04:24

回答

1

編輯我的反應,以符合最新的問題:

SELECT A.sid, A.title, A.time, A.bodytext, A.author, A.url, 
     D.page_id, D.num_comments 
FROM news.news A 
INNER JOIN (SELECT sid 
       FROM news 
      WHERE approved=1 
      ORDER BY sid desc 
      LIMIT $start, $limit) B USING (sid) 
LEFT JOIN comments.pages C ON A.sid = C.id 
LEFT JOIN (SELECT page_id,is_approved,count(*) as num_comments 
      FROM comments.comments 
      WHERE is_approved = 1) D ON C.page_id = D.page_id 
+0

它似乎缺少一個步驟匹配「sid」(來自news.news)與「page_id」(來自comments.pages)以獲取唯一的ID – 2013-04-25 04:07:02

+0

@Mayhem我編輯了我的查詢與問題中給出的新信息。 – imran 2013-04-25 13:23:27

+0

謝謝 - 只需做一個小小的調整,但它完美的作品。 – 2013-04-25 18:59:55