【发布时间】:2010-10-29 04:32:57
【问题描述】:
大家好,我回来了,期待你们的更多精彩。我有两张桌子:
- 时事通讯 - 每行包含电子邮件的“id”、“主题”、“正文”和“发件人”标题
- newsletter_queue — 每行包含一个“id”、“email”地址、添加到队列中的“date”和“newsletterid”
我的目标是开发一个 MySQL 查询,该查询可以从“newsletter_queue”中提取 x 行,然后按它们的“newsletterid”对它们进行分组,同时使用 GROUP_CONCAT(或任何有效的方法)将所有电子邮件放入一个字符分隔的字符串中我将用 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 被应用于已经连接的行,由于我试图限制一次发送的电子邮件总数,而不是唯一的时事通讯,因此它变得无用。如果有人能引导我朝着正确的方向前进,我将不胜感激。如果你最终写了这个例子,那也很好。
【问题讨论】:
-
是否有充分的理由在 SQL 中连接电子邮件?特别是因为无论如何都需要使用 PHP 进行后处理。恕我直言,从数据库中提取非结构化的字符串糊状物是次优的。
-
@Tomalak,好吧,它使我免于遍历 while() 循环以将电子邮件添加到数组中。现在的设置方式,while() 循环只为每个独特的时事通讯循环一次,我使用 explode() 将电子邮件转换为数组,我使用的 batchSend() 函数一次发送它们,而不是而不是为每个电子邮件地址打开一个 smtp 连接。你会推荐另一种方法吗?
标签: php mysql newsletter swiftmailer