大家好,我回来了,期待你们的精彩。我有两张桌子:
新闻稿-每行包含电子邮件的“id”、“subject”、“body”和“from”标题
新闻稿队列-每行包含一个“id”、“电子邮件”地址、添加到队列的日期和“新闻稿id”
我的目标是开发一个MySQL查询,它可以从'newsletter_queue'中提取x行,然后根据它们的'newsletter id'对它们进行分组,同时使用group_CONCAT(或任何有效的方法)将所有电子邮件放入一个字符分隔的字符串中,我将用PHP解析该字符串。我之所以想把它们放在一起是因为我使用的mailer库(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

这将在执行GROUPBY语句之前对内部查询应用限制。GROUPBY语句在外部查询中并不重要,因为GROUPBY无论如何都需要一个临时表和排序。如果需要对连接的结果进行某种排序,只需将其应用于外部查询,例如,通过将max或min应用于date并按其排序。

关于php - 时事通讯队列的复杂MySQL查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/914190/

10-14 13:07
查看更多