我有一个mails
表,这是我操作邮件的主要表格。我还有mails_sent
和mails_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_dates
和sending_dates
的1条记录的查询中,我仍然得到{{1}的记录的2倍}}
我该如何解决这个问题?
由于
Leron
答案 0 :(得分:0)
好的,我找到了解决方案,现在是:
$this->db->select("GROUP_CONCAT(DISTINCT(DATE_FORMAT(mails_sent.dt_sent, '%d-%m-%Y'))) AS sent_dates", FALSE );
换句话说,只需使用DISTINCT
。