2013-02-06 106 views
0

我一直試圖加入來自兩個不同表的所有行。我試過聯合和左連接。加入來自兩個不同表的所有行MySQL

現在我剛剛使用兩個單獨的查詢,並有一個接一個顯示。我想合併兩個查詢以同時顯示。

表1被稱爲'批准',表2被稱爲'評論'。

批准
- ID
- 帖子ID
- postUserID
- 用戶ID

評論
- ID
- 帖子ID
- postUserID
- 用戶ID
- 評
- date

+1

的例子,你能後的表結構?很難弄清楚什麼表會加入沒有任何細節 – Taryn

+0

@IanQuinn編輯你的原始問題併發布表結構在那裏,不要把它放在評論 – Taryn

回答

0

您可以插入您正在使用的SQL嗎? Union將組合這兩個表,一個連接將反過來從表中獲取所有行併合並所有關聯的行。 JOIN默認爲內部聯接。 UNION實際上將結合兩個表格的結果。如果您希望所有行都可以a,並且表b中的相應註釋使用左連接。

0

根據您的表,它看起來像你可以JOIN表:

select * 
from approves a 
inner join comments c 
    on a.userid = c.userid 
    and a.postid = c.postid 

我猜,你將需要加入的基礎上postiduserid多列的表。

我使用了一個INNER JOIN,它將返回兩個表之間的所有匹配行。如果只想返回​​表中的那些記錄,則可以使用LEFT JOIN。如果你需要幫助學習連接語法,這裏是一個很棒的visual explanation of joins

您可以使用UNION,但必須爲每個表選擇希望的列,因爲每個查詢中的UNION的列數必須相等。所以UNION是:

,我包括在除列
select id, postid, postUserId, userId, null as comment, null as date, 'approves' as Src 
from approves 
union all 
select id, postid, postUserId, userId, comment, date, 'comments' as src 
from comments 

通知稱爲src可用於確定從數據來幹什麼表。

+0

試過這個,我得到了一個布爾錯誤,當我使用mysql_fetch_assoc mysql_query(「SELECT * FROM批准INNER JOIN註釋c ON a.userID = c.userID AND a.postID = c.postID WHERE postUserID ='$ userID'&& userID!='$ userID'ORDER BY id DESC LIMIT 0,10「); –

+0

@IanQuinn我不確定錯誤是什麼,但我還包括一個'UNION'版本來返回數據 – Taryn

2

這裏將是一個UNION

select id, postID, postUserID, userID, comment, date from comments 
union 
select id, postID, postUserID, userID, null, null from approves 
+0

好吧,所以一旦我有了這個,有沒有什麼辦法可以確定當前記錄來自哪個表,如果我在WHILE循環中獲取這些查詢? –

+0

yes - 在第一個中添加另一個任意列,並且硬編碼爲1,第二個中爲2 ..你可以用它來說明。 – Randy

+0

聯合做的工作比JOIN更好 – Asuquo12

相關問題