CodeIgniter Active Records - 从选择查询重复重复

时间:2012-06-15 06:49:22

标签: sql codeigniter activerecord

我有一个mails表,这是我操作邮件的主要表格。我还有mails_sentmails_dates,它们将FK与mails连接起来并包含以下数据mails_dates - 一封邮件可能有多个日期设置用于发送,所以我有实现1:N其中N是用户为发送邮件设置的所有日期和mails_sent - 在发送邮件后,在此表中添加了一条新记录{ {1}}邮件及其发送日期。因为正如我所提到的,邮件可以在此处多次发送,关系也是id,其中1:N表示邮件发送时的不同日期。

我需要在UI中显示此信息。首先,我必须只显示发送日期,我用这个:

N

当我使用这个时,一切都很好我得到了一个包含所有日期的字符串。但问题是当我试图获取邮件发送日期时。我又添加了一个选择:

$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;

使我的查询如下所示:

$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; 包含让我们说 - 6个值,sending_dates只有一个,我最终会得到一个包含sent_dates值6倍的字符串。这是生产中所以我没有很多记录,但同样的情况发生在我有2 sent_datessending_dates的1条记录的查询中,我仍然得到{{1}的记录的2倍}}

我该如何解决这个问题?

由于

Leron

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方案,现在是:

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

换句话说,只需使用DISTINCT