LEFT JOINS を使用して複数のテーブルからデータを選択するクエリがあります。問題は、データが複製されていることです。
ここにクエリがあります
SELECT
A.ID,
T.T_ID,
T.name,
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,
S.S_ID,
S.status,
S.timestamp AS S_ts,
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
FROM artists A
LEFT JOIN TRACKS T
ON T.ID = A.ID
LEFT JOIN STATUS S
ON S.ID = A.ID
LEFT JOIN GIGS G
ON G.ID = A.ID
WHERE A.ID = '$ID'
ORDER BY S_ts, G_ts AND T_ts DESC LIMIT 20
問題は、結合内のテーブルの 1 つに別のテーブルよりも多くのデータがある場合、データが重複することです。したがって、tracks に 1 行、status に 2 行、gigs に行がない場合、トラックからのデータは 2 倍になります。
使用してみGROUP BY A.ID
ましたが、データが消去されます。したがって、前に示した例では、show は 1 行しかありませんstatus
。
私も試してみましGROUP_CONCAT
たが、その機能についてはよくわからないので、あまり言えません。
USINGSELECT DISTINCT
はGROUP BY A.ID
.