2015-08-25 68 views
0

基本上是爲了快速處理事情我需要能夠訪問兩個表中的信息,這些表通過一個到多箇中間到達的中間鏈接,然後是多對多關係。具體來說,我有,以下相關的表SQL一對多,多對多,查詢構建

用戶[ID,...]

人次[USER_ID,...]

trip_type [ID,trip_id,TYPE_ID]

類型[ id,...]

即用戶有許多旅行,有許多類型,他們本身有很多旅行。

我的目標是通過他們每次旅行獲得與特定用戶關聯的每個類型id(如果它們出現重複)的列表。

我敢肯定,這對SQL來說是微不足道的,但我不是其中的一員,因此我現在只是在寫點廢話。

回答

0
select users.id, trip_type.type_id, count(*) from users join trips on trips.user_id = users.id join trip_type on trips.id = trip_type.trip_id group by users.id, trip_type.type_id 

這也會給你一個用戶每種類型的旅行次數的計數。此查詢不會列出沒有進行任何旅行的用戶。如果您需要這些用戶,以及這個詞「加入」更改爲「左加入」

+0

這是絕對正確的,沒有trips.type_id? (myPHPadmin也不喜歡它) – Richard

+0

不,對不起,錯過了一張桌子,我已經編輯了答案,試試這個,讓我知道。它仍然可能不是100%,因爲我沒有具有該結構的數據庫進行測試。 – dinomix

+0

這工作非常感謝。 – Richard

0
SELECT tt.type_id, u.user_id, tr.id 
FROM trip_type tt 
INNER JOIN trips tr ON tr.id = tt.trip_id 
INNER JOIN types ty ON ty.id = tt.type_id 
INNER JOIN users u ON u.id = tr.user_id 
WHERE u.user_id = ? 

這將返回type_ids,USER_ID和跳閘IDS爲特定用戶。