2011-05-12 50 views
0

我有5個表:MySQL的5臺選擇查詢

  1. 用戶
  2. bands_users
  3. bands_gigs
  4. 演出

一個用戶可以有很多樂隊,一樂隊可以有很多用戶 一個演出可以有很多樂隊,一個樂隊可以有很多演唱會

鑑於用戶ID 1,我想返回所有與他們相關的樂隊演出。

任何幫助,將不勝感激。

回答

1

這樣的事情?

SELECT g.*, b.* 
FROM users u 
LEFT JOIN band_users bu ON u.id = bu.uid 
LEFT JOIN bands b ON bu.bid = b.id 
LEFT JOIN bands_gigs bg ON b.id = bg.bid 
LEFT JOIN gigs g ON bg.gid = g.id 
WHERE u.id = 1 
1

你可以在一行中做到這一點,但是從簡單開始,基本思想是你首先將用戶加入band_users和樂隊,其中用戶id在用戶和band_users中,樂隊id在兩個band_users和樂隊。這會讓你看到用戶所在的樂隊列表。然後,你可以加入band_gigs和gig的樂隊,樂隊id在樂隊和band_gigs中,樂隊ID在band_gigs和演唱會中。現在你有一個用戶所在樂隊列表的演出列表。

1

東西入手:

SELECT band.name, 
     gig.name 
FROM users 
     JOIN bands_users 
     ON users.name = bands_users.userName 
     JOIN bands 
     ON bands.name = bands_users.bandName 
     JOIN bands_gigs 
     ON bands.name = bands_gigs.bandName 
     JOIN gigs 
     ON bands_gigs.gigName = gigs.name 
WHERE users.id = 1;