MySQLで購読をキャンセルしたユーザー一覧を取得する

購読がキャンセルされたユーザーはlead_donotcontact テーブルに記録されていきます。

しかしこのテーブルだけでは、ユーザーの情報については見ることができません。

mysql> SHOW columns  FROM lead_donotcontact;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| lead_id    | int(11)      | YES  | MUL | NULL    |                |
| date_added | datetime     | NO   |     | NULL    |                |
| reason     | smallint(6)  | NO   | MUL | NULL    |                |
| channel    | varchar(255) | NO   |     | NULL    |                |
| channel_id | int(11)      | YES  |     | NULL    |                |
| comments   | longtext     | YES  |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)

各種情報はleadsに記録されていますので、JOINして取得してやりましょう。

mysql> SELECT leads.id,leads.date_added,comments FROM leads INNER JOIN lead_donotcontact ON leads.id=lead_donotcontact.lead_id;
+------+---------------------+--------------------------------------------+
| id   | date_added          | comments                                   |
+------+---------------------+--------------------------------------------+
|    1 | 2018-08-10 03:20:13 | 間違った形式のメールアドレス               |
|   10 | 2018-08-10 04:21:08 | 間違った形式のメールアドレス               |
|   19 | 2018-08-10 04:26:28 | 間違った形式のメールアドレス               |
|   30 | 2018-08-10 04:31:17 | 間違った形式のメールアドレス               |
|   31 | 2018-08-10 04:40:43 | 間違った形式のメールアドレス               |
|   32 | 2018-08-10 04:49:26 | 間違った形式のメールアドレス               |
+------+---------------------+--------------------------------------------+

あとは以下のような形でCSV出力もできます。

 mysql> SELECT * FROM leads INNER JOIN lead_donotcontact ON leads.id=lead_donotcontact.lead_id INTO OUTFILE '/tmp/do_not_contact.csv'
  FIELDS TERMINATED BY ','
  OPTIONALLY ENCLOSED BY '"';

MauticのREST APIを使ったほうがいい気もしますが、ユースケースにあわせて使い分けていくと良いでしょう。