2014-10-19 57 views
0

我有3個表,日誌成員,也客串,但我的日誌我存儲爲顧客(用戶)的唯一ID,要麼是他們的guest_id或member_id 。所以這裏有個問題,因爲它們來自不同的表格,我不知道如何加入&組合他們的數據。MYSQL - 聯盟SELECT和GROUP BY不工作

checkout_log表

id  user_id  checkout_as 
-------------------------------------- 
1   1   member 
2   2   guest 

成員表

id  fullname 
-------------------------------------- 
1   member01 
2   member02 

客人表

id  fullname 
-------------------------------------- 
1   guest01 
2   guest02 

我想達到什麼 - 結果

id  user_id  fullname  checkout_as 
---------------------------------------------- 
1   1   member01  member 
2   2   guest02  guest 




曾嘗試下面的SQL語句與UNION ALL,或GROUP BY,但沒有運氣。

SELECT * FROM 
(
SELECT checkout_log.id,checkout_log.user_id,guests.fullname,guests.email,checkout_log.checkout_as 
FROM checkout_log 
LEFT JOIN checkout_product ON checkout_product.checkout_log_id = checkout_log.id 
LEFT JOIN guests ON checkout_log.user_id = guests.id 

UNION ALL 

SELECT checkout_log.id,checkout_log.user_id,members.fullname,members.email,checkout_log.checkout_as 
FROM checkout_log 
LEFT JOIN checkout_product ON checkout_product.checkout_log_id = checkout_log.id 
LEFT JOIN members ON checkout_log.user_id = members.id 
) derivedTable 
GROUP BY id 
+0

我的問題也是事件發生後,如何在我的表結構goign計劃?因爲我覺得查詢和恐嚇我的整個數據和數據庫都非常複雜。請問這是我第一次在我的項目中計劃一個購物車數據庫,我還在學習,請指導。謝謝! – Mavichow 2014-10-19 18:14:31

+0

示例查詢中的表名與您問題中的表名不對應。 – 2014-10-19 18:14:40

+0

你沒有試過這個組嗎?你試圖使用group by的方式是無效的,從我閱讀的內容你不需要它。 – Lathejockey81 2014-10-19 18:18:39

回答

0

嘗試這樣做連接,而不是工會

select cl.id, cl.user_id, 
     coalesce(m.fullname, g.fullname) as fullname, 
     cl.checkout_as 
from checkout_log cl left join 
    members m 
    on cl.user_id = m.id and cl.checkout_as = 'member' left join 
    guests g 
    on cl.user_id = g.id and cl.checkout_as = 'guest'; 
+0

它的工作!我也在研究'coalesce'這個函數@ mysql ... cool!只需要問,它是我的數據庫結構都可以嗎?我擔心未來有大量數據,那麼數據就會混亂起來,因爲我將「客戶」和「成員」分開爲2個表。 – Mavichow 2014-10-19 18:28:22

+1

你的結構沒問題。我會傾向於將'members'和'guests'結合到一個單獨的表格中,以區分它們。 – 2014-10-19 19:46:22