2013-11-29 70 views
0

我想問你一個查詢(mysql)的幫助。我有3個表:mysql從3個表中選擇其中2個可能爲null

1。表 「評論」

ID  | content      | 
-------------------------------------- 
1  | content of first review 
2  | content of second review 

2。表 「利弊」

ID  | reviews_ID | pros   | 
--------------------------------------- 
1  |   1 | good service | 
2  |   1 | nice look | 
3  |   1 | not bad price| 
4  |   2 | good service | 
5  |   2 | design  | 

3.表中 「利弊」

ID  | reviews_ID | pros   | 
--------------------------------------- 
1  |   1 | delays  | 
4  |   2 | mistakes  | 
5  |   2 | troubles  | 

我我試圖做的是合併來自這3個表格的信息,其中「評論」表格是主要表格,表格2,3是指向它(reviews_ID)。

我想獲得這樣的結果:

=> content of first review 
    + good service  - delays 
    + nice look 
    + not bad price 
當然,在陣列/結果

,這僅僅是爲了更好的瞭解:)

+3

你想獲得這些結果,但你還沒有嘗試過什麼? –

+0

親愛的@ChristianMark,如果你認識我,你知道,我是那種試圖自己解決所有事情的人,作爲最後的機會,我正在尋求幫助。現在是凌晨3點30分,我曾試過從早上8點開始嘗試50次其他查詢。我真的沒有足夠的權力來解釋,我嘗試了什麼,並且與最終結果非常接近 - >實際上,我可以在SQL中看到所有請求的結果,但是有重複的結果。據我所知,你正在幫助保持高水平的服務器,對吧?儘管我對工作有所瞭解,但我不得不說,你的評論對任何人都沒有幫助。 –

回答

1

試試這個sqlFiddleGROUP_CONCAT可以爆炸的利弊到PHP中的數組或什麼的。

SELECT content,p.pros,c.cons 
FROM reviews 
LEFT JOIN 
    (SELECT reviews_id,GROUP_CONCAT(pros)as pros 
    FROM pros 
    GROUP BY reviews_id)as p 
ON p.reviews_id = reviews.id 
LEFT JOIN 
    (SELECT reviews_id,GROUP_CONCAT(cons)as cons 
    FROM cons 
    GROUP BY reviews_id)as c 
ON c.reviews_id = reviews.id 
WHERE reviews.id = 1; 

結果將是

CONTENT      PROS         CONS 
content of first review  good service,nice look,not bad service delays 
+0

感謝您編輯我的答案!並且OP應該知道有大小爲GROUP_CONCAT()的輸出值的LIMIT。請參閱http://forums.phpfreaks.com/topic/120438-solved-group-concat-max-length/ –

+0

我不知道大小限制感謝提到 –

+0

非常歡迎! –

1

SELECT語句只產生二維表。所以,你無法使用STANDARD SELECT獲得分層樹。我建議遵循SQL並在客戶端轉換顯示格式。

SELECT 'content',r.content as value 
FROM reviews r 
WHERE r.ID = 1 

UNION 

SELECT 'pros', p.pros 
FROM reviews r LEFT JOIN pros p 
    ON r.ID = p.reviews_ID 
WHERE r.ID = 1 

UNION 

SELECT 'cons', c.cons 
FROM reviews r LEFT JOIN cons c 
    ON r.ID = c.reviews_ID 
WHERE r.ID = 1 
+0

即使我接受了以前的回答,你對UNION的例子對我來說更容易理解,也許我會使用它:D謝謝@Jungsu Heo –

+0

@FredericoRossini非常歡迎你!正如我提到錫的回答。有大小LIMIT。小心! –

0

試試這個:

SELECT A.content, B.pros, C.cons 
FROM reviews A LEFT JOIN pros B ON A.ID = B.reviews_ID 
    LEFT JOIN cons C ON A.ID = C.reviews_ID