ユーザー、ジャーナル、ファイル、フラグ、flag_details の 6 つのテーブルがあります。
users (id, avatar, fullname)
journals (id, container, container_id, user_id, title)
files (id, container, container_id, user_id, title)
flags (id, container, container_id, total)
flag_details (id, container, container_id, reason, comment, user_id)
trend_item (id, container, container_id, user_id)
関係は次のとおりです。
if(flags.container='look') then flags.container_id = journals.id
だから私はジャーナルテーブルからすべてのレコードを取得します
if(flags.container='photo') then flags.container_id = files.id
だから私はファイルテーブルからすべてのレコードを取得します
if(flags.container='trend') then flags.container_id = trend_item.id
だから私はtrend_itemテーブルからすべてのレコードを取得します
したがって、私の見解は次のようになります。
id | container | things | total flag
1 | look | 123 - guy | 2
2 | photo | 321 - budi | 4
3 | trend | 345 - elvis | 3
4 | look | 876 - cans | 6
だから私は次のようなクエリを得ました:
SELECT DISTINCT (id), created_at, container, IF( container = 'look', (
SELECT a.container_id
FROM flags a, journals b
WHERE a.container_id = b.id
), IF( container = 'photo', (
SELECT a.container_id
FROM flags a, files b
WHERE a.container_id = b.id
), (
SELECT a.container_id
FROM flags a, trend_items b
WHERE a.container_id = b.id
) ) ) , total,
`status`
FROM flags
ORDER BY created_at DESC
しかし、答えはサブクエリが複数行を返すことです。
そのすべてを 1 つのクエリにまとめれば、可能性はありますか?