我的目标是开发一个MySQL查询,可以从'newsletter_queue'中提取x行,然后使用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
我的问题是LIMIT 125正在应用于已连接的行,因为我试图限制一次发送的总电子邮件数量,而不是唯一的新闻简报,因此无法使用它。如果有人能指导我朝着正确的方向前进,我将非常感激。如果你最终写下这个例子,那也很棒。
答案 0 :(得分:3)
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
这将在执行group by语句之前将限制应用于内部查询。 group by语句在外部查询中并不重要,因为group by无论如何都需要临时表和排序。如果您需要对连接结果进行某种排序,则可以将其应用于外部查询,例如将max或min应用于日期并按顺序排序。
答案 1 :(得分:2)
这也应该做你想要的:
SELECT substring_index(GROUP_CONCAT(email ORDER BY date ASC SEPARATOR '|'),'|',125), newsletterid, date
FROM newsletter_queue
WHERE status='0'
GROUP BY newsletterid
答案 2 :(得分:0)
狂野的想法,但这有效吗?
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之间。