mails
メールを操作するためのメインテーブルであるテーブルがあります。私はまた、それらを接続し、次のようなデータを含むFKを持っていmails_sent
ます-1つのメールに送信するために複数の日付を設定することができるので、メールを送信するためにユーザーから設定されたすべての日付がどこにあるかを認識しています-後メールが送信される新しいレコードが、メールのと送信日とともにこのテーブルに追加されます。前述したように、ここではメールが複数回送信される可能性があるため、ここではメールが送信されたさまざまな日付を表す関係もあります。mails_dates
mails
mails_dates
1:N
N
mails_sent
id
1:N
N
この情報をUIに表示する必要があります。最初に送信日のみを表示する必要があり、これを使用します。
$this->db->select("mails.id, mails.subject, mails.dt_created, mails.groups");
$this->db->select("GROUP_CONCAT(DATE_FORMAT( mails_dates.dt_sending_date, '%d-%m-%Y')) AS sending_dates", FALSE );
$this->db->join('mails_dates','mails_dates.mail_id = mails.id', 'left');
$this->db->join('mails_sent','mails_sent.mail_id = mails.id', 'left');
$this->db->from('mails');
$this->db->group_by('mails.id');
$res = $this->db->get()->result_array();
return $res;
これを使用していたときは、すべてが正常で、すべての日付が含まれる文字列を取得していました。しかし、問題は、メールが送信された日付を取得しようとしたときです。もう1つ選択を追加しました:
$this->db->select("GROUP_CONCAT(DATE_FORMAT( mails_sent.dt_sent, '%d-%m-%Y')) AS sent_dates", FALSE );
クエリを作成すると、次のようになります。
$this->db->select("mails.id, mails.subject, mails.dt_created, mails.groups");
$this->db->select("GROUP_CONCAT(DATE_FORMAT( mails_sent.dt_sent, '%d-%m-%Y')) AS sent_dates", FALSE );
$this->db->select("GROUP_CONCAT(DATE_FORMAT( mails_dates.dt_sending_date, '%d-%m-%Y')) AS sending_dates", FALSE );
$this->db->join('mails_dates','mails_dates.mail_id = mails.id', 'left');
$this->db->join('mails_sent','mails_sent.mail_id = mails.id', 'left');
$this->db->from('mails');
$this->db->group_by('mails.id');
$res = $this->db->get()->result_array();
return $res;
しかし、問題は、Ifsending_dates
に-6つの値が含まれてsent_dates
いて、1つしかない場合、の値の6倍を含む文字列になってしまうことですsent_dates
。これは本番環境であるため、レコードはあまりありませんが、2つとsending_dates
1つのレコードがあるクエリでも同じことが起こりますがsent_dates
、から2倍のレコードを取得しsent_dates
ます。
どうすればこれを修正できますか?
ありがとう
レロン