0

mailsメールを操作するためのメインテーブルであるテーブルがあります。私はまた、それらを接続し、次のようなデータを含むFKを持っていmails_sentます-1つのメールに送信するために複数の日付を設定することができるので、メールを送信するためにユーザーから設定されたすべての日付がどこにあるかを認識しています-後メールが送信される新しいレコードが、メールのと送信日とともにこのテーブルに追加されます。前述したように、ここではメールが複数回送信される可能性があるため、ここではメールが送信されたさまざまな日付を表す関係もあります。mails_datesmailsmails_dates1:NNmails_sentid1:NN

この情報を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_dates1つのレコードがあるクエリでも同じことが起こりますがsent_dates、から2倍のレコードを取得しsent_datesます。

どうすればこれを修正できますか?

ありがとう

レロン

4

1 に答える 1

0

わかりました、私は解決策を見つけました、ここにあります:

$this->db->select("GROUP_CONCAT(DISTINCT(DATE_FORMAT(mails_sent.dt_sent, '%d-%m-%Y'))) AS sent_dates", FALSE );

つまり、を使用するだけDISTINCTです。

于 2012-06-15T07:10:44.480 に答える