artists
簡単に参照できるように、呼び出されたテーブルに結合された複数のテーブルのビューを作成する必要があります。
ビュー内のデータの配置は、私が苦労しているものです。データが重複しないように、結合が互いに独立して動作する必要があります。これまでのクエリといくつかの例を示します。
CREATE VIEW stream_view AS
SELECT
A.ID,
T.T_ID,
T.name AS name,
T.pic AS T_pic,
T.timestamp AS T_ts,
(SELECT COUNT(*) FROM track_plays WHERE T_ID = T.T_ID) AS plays,
(SELECT COUNT(*) FROM track_downloads WHERE T.T_ID) AS downloads,
(SELECT COUNT(*) FROM likes WHERE E_ID = T.ID AND event = 'T') AS T_likes,
S.S_ID,
S.status,
S.timestamp AS S_ts,
(SELECT COUNT(*) FROM likes WHERE E_ID = S.ID AND event = 'S') AS S_likes,
G.G_ID,
G.gig_name,
G.date_time,
G.lineup,
G.price,
G.currency,
G.pic AS G_pic,
G.ticket,
G.venue,
G.timestamp AS G_ts,
(SELECT COUNT(*) FROM likes WHERE E_ID = G.ID AND event = 'G') AS G_likes
FROM artists A
LEFT JOIN status S
ON S.ID = A.ID
LEFT JOIN gigs G ON G.ID = A.ID
LEFT JOIN tracks T ON T.ID = A.ID
いくつかの例を作成しますが、簡単にするためにすべての ID のみを含めます。
起こるべきことの例
A.ID
1、2、および 3 の2 つの 3 があるとします。これらの ID のそれぞれに、いくつかG_ID
の 、 、T_ID
およびS_ID
が属しています。重複がないようにビューが出てくるはずで、それぞれG_ID
、T_ID
またはS_ID
別の行にあり、それらに割り当てられますA_ID
。このようなもの;
A_ID G_ID T_ID S_ID
1 1 NULL NULL
1 NULL 4 NULL
2 NULL NULL 5
3 2 NULL NULL
3 NULL 8 NULL
3 NULL NULL 8
現時点で何が起こっているかの例
A_ID G_ID T_ID S_ID
1 1 NULL NULL
1 1 4 NULL
2 NULL NULL 5
3 2 NULL NULL
3 2 8 NULL
3 2 8 8
G_ID
ご覧のとおり、データが複製されているため、テーブルには同じ,T_ID
またはが複数含まれていますS_ID
。これらの ID は独自の列で一意であるため、 a の重複はできませんが、たとえば、G_ID
aG_ID
と aは同じ値を持つことができます。T_ID