2013-11-26 46 views
0

我有三個表多個表:加入一個生產更多結果

Info: 
| article_id | title   | author    | rating  | num_comments | 
|------------|----------------|---------------------|------------|--------------| 
| 1   | a title  | an author   | 3.5  | 2   | 
| 2   | another title | a different author | 2   | 0   | 


Articles: 
| article_id | text    | 
|------------|------------------| 
| 1   | longish text... | 
| 2   | more text...  | 


Comments: 
|comment_id | article_id | name  | comment | date_added | 
|-----------|------------|-------------|------------|------------| 
| 1   | 1   | this name | first ! | 2013-10-25 | 
| 2   | 1   | that name | bla  | 2013-10-26 | 

我可以檢索的前兩個數據沒有問題:

SELECT Info.*, Articles.text 
    FROM Info 
    JOIN Articles 
    ON Info.article_id = Articles.article_id 
    WHERE article_id = :article_id 

但現在我想從第三個表中獲取匹配的行,按日期對它們進行排序,最好將它們輸出到多維數組中。 這甚至有可能與一個查詢?

所以對於​​期望的結果應該是這樣的:

array { 
      [article_id] => 1, 
      [title] => a title, 
      [author] => an author, 
      [rating] => 3.5, 
      [num_comments] => 2, 
      [text] => longish text..., 
      [comments] => array { 
            [1] => array { 
               [comment_id] => 1, 
               [name] => this name, 
               [comment] => first !, 
               [date_added] => 2013-10-25 
            [2] => array { 
               [comment_id] => 2, 
               [name] => that name, 
               [comment] => bla, 
               [date_added] => 2013-10-26 
               } 
      } 

回答

2

你可以使用LEFT JOIN以得到甚至文章的結果當你沒有評論:

SELECT i.*, a.text, c.* 
FROM Info i 
INNER JOIN Articles a ON Info.article_id = Articles.article_id 
LEFT JOIN Comments c ON c.article_id = a.article_id 
WHERE a.artice_id = :article_id 
+0

謝謝,但不會產生每個評論的結果?我編輯了一下我的問題,因爲我認爲我不清楚期望的結果。 – Bastianb314

+0

在一個查詢中,這與您所能達到的最接近。 –

+0

然後,兩個單獨的查詢,謝謝! – Bastianb314

1

只需要添加另外加入的語句,並加入第三個表

0

我沒有測試過這

SELECT * FROM Articles 
    JOIN Info ON Articles.id = Info.article_id 
    JOIN Comments ON Info.article_id = Comments.article_id WHERE Comments.article_id = :article_id