0

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.ID1、2、および 3 の2 つの 3 があるとします。これらの ID のそれぞれに、いくつかG_IDの 、 、T_IDおよびS_IDが属しています。重複がないようにビューが出てくるはずで、それぞれG_IDT_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_IDaG_IDと aは同じ値を持つことができます。T_ID

4

1 に答える 1