我有一个mails
表格,它是我处理邮件的主要表格。我也有FK 连接它们mails_sent
并包含如下数据- 一封邮件可能有多个发送日期设置,所以我知道用户为发送邮件设置的所有日期在哪里和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;
当我使用它时,一切都很好,我得到了一个包含所有日期的字符串。但问题是当我尝试获取发送邮件的日期时。我又添加了一个选择:
$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
只有一个我最终得到一个包含 6 倍值的字符串sent_dates
。这是在生产中,所以我没有很多记录,但同样的情况发生在我有 2 条sending_dates
和 1 条记录的查询中,但我sent_dates
仍然从sent_dates
.
我怎样才能解决这个问题?
谢谢
勒隆