2013-03-20 85 views
0

我試圖從MySQL中的兩個表中獲取一個列表。通過查看artist_albums_link - > artist_uid並與artists_albums匹配。該列表應該包含相同的專輯,但也包含用戶沒有的藝術家的所有專輯。獲取鏈接表中具有值的表中的所有行

爲user_uid = '5' 求購結果

album_uid  artist_uid      title  user_uid 
album:another artist:00N1TiCLsiP8IE24hw0rl9 yahoo  5 
album:test  artist:00N1TiCLsiP8IE24hw0rl9 Test  5 
album:notinlist artist:00N1TiCLsiP8IE24hw0rl9 add this null 

這是下面的數據表。 注意用戶'5'有兩個album_links,但因爲藝術家還有一個專輯,它也被顯示。專輯「not show」不在用戶albums_link中,因此它不在列表中。

表:artists_albums

album_uid  artist_uid      title 
album:another artist:00N1TiCLsiP8IE24hw0rl9 yahoo 
album:noshow artist:00sazWvoTLOqg5MFwC68Um not show  
album:notinlist artist:00N1TiCLsiP8IE24hw0rl9⇥ add this  
album:test  artist:00N1TiCLsiP8IE24hw0rl9 Test  

表:artist_albums_link

uid user_uid artist_uid      album_uid 
1 5   artist:00N1TiCLsiP8IE24hw0rl9 album:test 
2 6   artist:00N1TiCLsiP8IE24hw0rl9 album:test 
3 5   artist:00N1TiCLsiP8IE24hw0rl9 album:another 

欲以加入,並且沒有成功的空值。新的值a.updated(時間戳)對於該行是正確的,但是對於專輯「album:notinlist」的值b.found(timestamp)是錯誤的,該帖子在artist_albums_link中不存在。

SELECT a.album_uid, a.artist_uid, a.title, a.updated, b.user_uid, b.found 
FROM artist_albums a LEFT OUTER JOIN artist_albums_link b ON a.artist_uid = b.artist_uid 
WHERE b.user_uid = '5' 

結果:

album_uid  artist_uid      title  updated     user_uid found 
album:another artist:00N1TiCLsiP8IE24hw0rl9 yahoo  2013-03-20 11:29:08  5   2013-03-18 11:24:47 
album:another artist:00N1TiCLsiP8IE24hw0rl9 yahoo  2013-03-20 11:29:08  5   2013-03-19 11:29:59 
album:notinlist artist:00N1TiCLsiP8IE24hw0rl9 add this 2013-03-15 11:41:20  5   2013-03-18 11:24:47 
album:notinlist artist:00N1TiCLsiP8IE24hw0rl9 add this 2013-03-15 11:41:20  5   2013-03-19 11:29:59 
album:test  artist:00N1TiCLsiP8IE24hw0rl9 Test  2013-03-20 11:23:41  5   2013-03-18 11:24:47 
album:test  artist:00N1TiCLsiP8IE24hw0rl9 Test  2013-03-20 11:23:41  5   2013-03-19 11:29:59 
+0

與下面的代碼相同。問題在於專輯'add this'與user_uid一起顯示,我不想將它設爲null或「」,以便我可以查看用戶是否缺少專輯。 – Backer 2013-03-20 12:52:07

+0

當用時間戳添加另一列時,我可以看到所有結果都具有相同的日期。看起來像user_uid,發現採取第一行的價值和適用於其餘:/ – Backer 2013-03-20 12:55:35

回答

0

你可以試試下面的代碼:

SELECT a.album_uid, a.artist_uid, a.title, b.user_uid 
FROM artists_albums a, artist_albums_link b 
WHERE a.artist_uid = b.artist_uid AND b.user_uid = 5; 

希望它能幫助!

+0

這給了一個列表(雙職位),所以添加GROUP BY,然後我們幾乎在那裏。 SELECT a.album_uid,a.artist_uid,a.title,b.user_uid FROM artist_albums一個,artist_albums_link b WHERE a.artist_uid = b.artist_uid AND b.user_uid = '5' GROUP BY a.album_uid; 此列表給出了一個user_uid的相冊'add this',我希望這是''或null,以便能夠看到用戶沒有該相冊。 – Backer 2013-03-20 12:45:18

0

終於找到了一些有效的東西。

SELECT a.album_uid, a.artist_uid, a.title, a.updated, b.user_uid, b.found 
FROM artist_albums AS a 
LEFT OUTER JOIN artist_albums_link AS b ON a.album_uid = b.album_uid 
WHERE EXISTS (SELECT artist_uid FROM artist_albums_link WHERE artist_uid = a.artist_uid) AND (b.user_uid = '5' OR b.user_uid is null) 
相關問題