메일 조작을위한 주요 테이블 인 mails
테이블이 있습니다. 나는 또한 mails_sent
과 mails_dates
을 가지고 있는데, 이것들은 mails
과 FK를 연결하고 다음과 같은 데이터를 포함하고있다 : mails_dates
- 하나의 메일이 둘 이상의 날짜 집합을 가질 수 있으므로 보낼 곳이있다. 1:N
여기서 N
은 메일에 대해 사용자로부터 모든 날짜가 설정되어있다. mails_sent
- 메일을 보낸 후이 테이블에 메일의 id
및 보낸 날짜와 함께 새 레코드가 추가됩니다. 내가 말했듯이 메일이 여기에 한 번 이상 전송 될 수 있기 때문에 관계도 1:N
입니다. 여기에서 N
은 메일이 전송 된 다른 날짜를 나타냅니다.CodeIgniter 활성 레코드 - 선택 쿼리에서 재발행을 반복합니다.
UI에이 정보를 표시해야합니다. 우선은 전송 날짜와 I 사용자가이를 보여주고 있었다 :
$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;
그러나 문제는 sending_dates
이하자가 포함 된 경우의 말할 것입니다 - 6 개 값 및 sent_dates
은 내가 끝낼 일이있다 값이 6 배인 sent_dates
의 문자열 이것은 프로덕션에서 많은 레코드가 없지만 같은 결과가 sent_dates
에서 2 번 레코드 인 sent_dates
에 대해 2 sending_dates
과 1 레코드가있는 쿼리에서 발생합니다.
어떻게 해결할 수 있습니까? 즉
$this->db->select("GROUP_CONCAT(DISTINCT(DATE_FORMAT(mails_sent.dt_sent, '%d-%m-%Y'))) AS sent_dates", FALSE);
그냥 DISTINCT
를 사용 :
감사
Leron
'mails_sent'를 내부 JOIN으로 만듭니다. –
아니,이 방법으로 모든 결과도 얻지 못합니다. 나는 뚜렷한 것을 사용하여 비슷한 문제가 해결되는 것을 보았지만 몇 가지 시도를했지만 여전히 성공하지 못했습니다. – Leron