문제

안녕하세요 여러분, 나는 돌아 왔고 당신의 광채를 더 많이 기대하고 있습니다. 두 개의 테이블이 있습니다.

  1. 뉴스 레터 - 각 행에는 'ID', '제목', '바디'& '가 포함되어 있습니다.
  2. Newsletter_Queue - 각 행에는 'ID', '이메일'주소, '날짜'가 큐에 추가 및 '뉴스 레터'에 추가됩니다.

내 목표는 'Newsletter_queue'에서 x 양의 행을 가져올 수있는 MySQL 쿼리를 개발 한 다음 group_concat (또는 무엇이든)를 사용하여 모든 이메일을 문자 분리 된 문자열에 넣는 동안 'Newsletterid'로 그룹화하는 것입니다. PHP와 함께. 내가 함께하고 싶은 이유는 내가 사용중인 메일러 라이브러리 (SwiftMailer)가 배치 이메일에 대한 이메일이있는 배열을 수락하기 때문입니다. 또한 가능하면 두 테이블을 함께 결합하는 것이 매우 깔끔하여 두 번째 쿼리를 피할 수 있습니다.

지금까지 내가 가지고있는 것은 다음과 같습니다.

SELECT GROUP_CONCAT(email ORDER BY date ASC SEPARATOR '|'), newsletterid, date
FROM newsletter_queue
WHERE status='0'
GROUP BY newsletterid
LIMIT 125

내 문제는 한계 125가 이미 연결된 행에 적용되어 고유 한 뉴스 레터가 아닌 한 번에 전송되는 총 이메일의 양을 제한하려고한다는 사실 때문에 쓸모가 없다는 것입니다. 누군가가 올바른 방향으로 나를 인도 할 수 있다면, 나는 매우 감사 할 것입니다. 당신이 그 예를 작성하면, 그것도 좋습니다.

도움이 되었습니까?

해결책

SELECT GROUP_CONCAT(email ORDER BY date ASC SEPARATOR '|'), newsletterid, date
FROM 
   (SELECT email, newsletterid, date 
    FROM newsletter_queue
    WHERE status="0"
    ORDER BY date ASC
    LIMIT 125) as Unsent
GROUP BY newsletterid

이렇게하면 문이 실행되기 전에 내부 쿼리에 한도가 적용됩니다. 그룹에 의해 그룹이 외부 쿼리에있는 것은 중요하지 않습니다. 연결된 결과의 주문이 필요한 경우, 예를 들어 Max 또는 Min을 현재까지 적용하고 주문하여 외부 쿼리에 적용 할 수 있습니다.

다른 팁

이것은 또한 당신이 원하는 것을 수행해야합니다.

SELECT substring_index(GROUP_CONCAT(email ORDER BY date ASC SEPARATOR '|'),'|',125), newsletterid, date
FROM newsletter_queue
WHERE status='0'
GROUP BY newsletterid

거친 아이디어이지만 이것이 효과가 있습니까?

SELECT GROUP_CONCAT(email ORDER BY date ASC SEPARATOR '|'), newsletterid, date
FROM newsletter_queue
WHERE status='0'
GROUP BY newsletterid, ID MOD 125

한 레코드의 최대 이메일 주소는 125로 의심됩니다.
불행히도 금액은 정확히 125가 아닙니다. 1에서 125 사이 일 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top