MySQL の 2 つのテーブルからリストを取得しようとしています。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' には 2 つの album_link がありますが、アーティストにはもう 1 つのアルバムがあるため、それも表示されていることに注意してください。アルバム「非表示」はユーザーの albums_link にないため、リストには表示されません。
テーブル: artist_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
join を使用して null 値を取得しようとしましたが、成功しませんでした。行の新しい値 a.updated (timestamp) は正しいですが、アルバム「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