0

列の1つが複数の値で構成されている1つのクエリで行のリストを取得する必要があり、これを理解できませんでした。

人々へのメールを記録する 3 つのテーブルがあります。1 つのテーブルには、first_name、last_name、address など、個人の連絡先データがすべて含まれています。#1 - Mailing_1、#2 Mailing_2 など。3 番目のテーブルは、メーリング ID とユーザー ID をログに記録することで、これら 2 つを関連付けます。ここで、最後の列に各ユーザーが取得したメールインのリストが表示される、ユーザーの完全なリストを取得する必要があります。

これが私が試したことです:

SELECT p.fname, p.lname, p.address m.mailing_name FROM people p
JOIN mailings_liaison l ON l.contact_id - p.id
JOIN mailings m ON m.id = l.mailings_id
WHERE 1
ORDER by p.lname ASC

これで必要なものは得られますが、ある人が 2 つ以上の郵送物を持っている場合、追加の行として表示されます。これらの行を結合する必要があるため、各人がクエリ結果に 1 つの行のみを持ち、最後の列にいくつかのメーリングがリストされます。つまり、次のようになります。

| 1. | John | White | john@white.ru | Mailing_1 |
| 2. | John | White | john@white.ru | Mailing_2 |

しかし、どういうわけか代わりに私は取得したい:

| 1. | Jhon | White | john@white.ru | Mailing_1 Mailing_2 |

これは可能ですか?

4

1 に答える 1

4

使用するGROUP_CONCAT

SELECT p.fname, p.lname, p.address, 
       GROUP_CONCAT(m.mailing_name SEPARATOR ' ') 
FROM   people p
       JOIN mailings_liaison l ON l.contact_id - p.id
       JOIN mailings m ON m.id = l.mailings_id
GROUP  BY p.fname, p.lname, p.address
ORDER  by p.lname ASC
于 2013-09-27T20:12:19.713 に答える