2011-10-19 152 views
0

我有兩個表包含兩種不同類型的註釋。其中一個表包含來自用戶的評論(因此它有一個包含其用戶ID的外鍵),另一個表包含未登錄用戶的評論(因此它沒有任何用戶ID,但是它包含一個名稱,電子郵件等)兩個不同的SQL查詢的組合和排序結果

現在,當我需要打印這些評論時,我希望他們在同一個列表中,按他們的created_at值排序。所以我需要做兩個不同的查詢(第一個也加入用戶表,查找用戶名等),然後合併結果。

我在想我可以做一個聯盟,但是當這些表有不同的領域時,這是行不通的。我可以通過合併兩個結果數組來完成我的應用程序邏輯,但如果有一個更好的解決方案可以直接在數據庫中完成,那似乎很麻煩。

回答

1

當您通過指定SELECT部件中的字段來對齊兩個表時,仍然可以使用UNION

實施例:

Table1(id,comment,enterdate,userid)

Table2(id,comment,enterdate)

SELECT id, comment, enterdate, userid, 'Logged In' as Type FROM Table1 
UNION 
SELECT id, comment, enterdate, NULL, 'Guest' FROM Table2 

UNION也可以根據需要再進行排序。

+0

謝謝。這工作完美。 –

0

如果您將第一個表的userId和第二個表的名稱命名爲ex,則可以使用您建議的UNION溶劑。身份

選擇的userid身份,created_at如日期從loggedUsers UNION 選擇的名稱標識,created_at從guestUsers

希望幫助日期...

+0

這些字段的名稱在UNION中不相關。您需要具有匹配數據類型的相同數量的列。 –

+0

感謝提示@ H-Man2 – reven