こんにちは、これを達成する最善の方法について混乱しています。これまでの私のクエリは以下のとおりです。
基本的に現時点では、複数のメディア グループに属する画像があります。私が戻したいのは、メディア グループに関連付けられた画像が 1 つしかない場合、画像のランダム メディア グループです。
たとえば、画像1,2,3がある場合
イメージ 1 はメディア グループ 10、11、12 に属し、イメージ 2 はメディア グループ 13、14、15 に属し、イメージ 3 はメディア グループ 15、16、17 に属します。
この場合に戻したいのは、
イメージ 1 - メディア グループ 11 イメージ 2 - メディア グループ 13 イメージ 3 - メディア グループ 15
15には2つの画像が関連付けられているため、画像3を15にしたいので、これを元に戻したいと思います。この望ましい結果を達成するための最良の方法を教えてください。
SELECT image_id, media_group_id, COUNT(*) as image_count FROM image_media_group
GROUP BY media_group_id
たとえば、上記のクエリは以下を返します。メディア グループに画像が 1 つしかない場合、メディア グループごとに image_id 1432 を戻したくありません。メディア グループのすべての結果に対するより大きなクエリは次のとおりです。
SELECT T.guid_id, T.id, mg.name, mg.alias_title, T.title, T.hits, al.title, T.distance, uf.real_name, uf.user_name,mg.alias_title,
COUNT(1) as image_count
FROM
(SELECT imx.id,imx.distance, imx.guid_id, imx.user_id, imx.hits, imx.title, imx.visible, imx.approved, imx.advertise_to
FROM image imx
ORDER BY floor(RAND()*(SELECT count(1) FROM image))
) AS T
INNER JOIN image_media_group img ON T.id = img.image_id
INNER JOIN media_group_title mg ON img.media_group_id =mg.media_group_id
INNER JOIN album_image ai ON T.id = ai.image_id
INNER JOIN album al ON ai.album_id = al.id
INNER JOIN user us ON T.user_id = us.id
LEFT JOIN user_flickr uf ON us.flickr_id = uf.id
LEFT JOIN user_site uss ON us.user_site_id= uss.id
WHERE T.visible = in_image_visible
AND T.approved = in_image_approved
AND (T.advertise_to <= in_date_time_now OR T.advertise_to IS NULL)
GROUP BY img.media_group_id;
メインクエリの結合を変更してこれを含めることを考えていたので、上記のimage_media_groupクエリで目的の結果を達成しようとしました