以前に投稿された他の人に似た問題がありますが、それらの解決策は実際にはうまくいかないようです。
私がやろうとしているのは、特定のユーザー (別のデータベースで見つかった) に関連する 1 つのデータベースから行を選択し、次に関連付けられている添付ファイルを取得する 3 番目のデータベースから行を選択することです。
- TABLE
users
(これから取得するのは id だけです) - TABLE
membership
(staff_id と group_id が必要です) - TABLE
msg_group
(id、starts、expires、および message は、私が関心を持っているものです) - TABLE
msg_attach
(id、ident、type、file はここから必要なものです)
それで。私はこのクエリを持っています:
SELECT msg_group.message, msg_group.starts,
msg_group.expires,
GROUP_CONCAT(msg_attach.file SEPARATOR ',')
FROM `membership`
INNER JOIN `msg_group`
ON membership.group_id = msg_group.group_id
LEFT JOIN `msg_attach`
ON msg_group.id = msg_attach.ident AND msg_attach.type = "1"
WHERE membership.staff_id = "1"
AND msg_group.starts <= CURRENT_TIMESTAMP
AND msg_group.expires >= CURRENT_TIMESTAMP
ORDER BY msg_group.expires ASC LIMIT 0, 30
問題は、5 行が返されることです。msg_attach.file 列に「file.jpg,file2.jpg」が含まれている必要があります。これで問題ありませんが、その下に msg_attach 列が NULL の行がさらに 4 行必要です。
これに対抗するために、IFNULL(msg_attach.file, 'null') を使用してみましたが、これが返すのはまだ 1 行ですが、file.jpg、file2.jpg、null、null、null、null です。
私が望むのは、行の魔女の添付ファイルがfile.jpg、file2.jpgであり、さらに4行がその列で「null」になることです。
私はこれを十分に説明したことを願っています!#
ご協力ありがとうございます。アレックス
編集: サンプル テーブルとデータ。
msg_group:
------------------------------------------------------------
| id | group_id | message | starts | expires |
| 1 | 1 | PIES | date 1 | date 2 |
| 2 | 1 | CAKES | date 1 | date 2 |
| 3 | 1 | BEERS | date 1 | date 2 |
| 4 | 1 | POMMEGRANITES | date 1 | date 2 |
------------------------------------------------------------
msg_attach:
---------------------------------
| id | type | ident| file |
| 1 | 1 | 3 | corona.jpg |
| 2 | 1 | 3 | peroni.png |
---------------------------------
したがって、クエリに次のように返してもらいたいと思います。
------------------------------------------------------------
| message | starts | expires | file |
| PIES | date1 | date2 | null |
| CAKES | date1 | date2 | null |
| BEERS | date1 | date2 | corona.jpg,peroni.png |
| POMMEGRANITES | date1 | date2 | null |
------------------------------------------------------------
私が得るものは次のとおりです。
------------------------------------------------------------
| message | starts | expires | file |
| BEERS | date1 | date2 | corona.jpg,peroni.png |
------------------------------------------------------------
または ISNULL を使用して:
------------------------------------------------------------------------------
| message | starts | expires | file |
| BEERS | date1 | date2 | null, corona.jpg,peroni.png, null, null |
------------------------------------------------------------------------------
これはすべて、問題に関連していないと/思う/メンバーシップとユーザーのものを省略しています。GROUP_CONCAT (つまり、msg_attach.file のみ) がなければ、ファイルが個別にリストされた BEERS の場合は 2 つだけで、5 つの行が返されます。