嘿,大家,我回来了并且期待更多你的辉煌。我有两个表格:

  1. 时事通讯--每个行包含一个'id'、'问题','体'&从头一个电子邮件
  2. newsletter_queue—每个行包含一个'id','email'的地址,'新'加入到队列和'newsletterid'

我的目标是开发一个MySQL查询,可以拉x量的行'newsletter_queue',然后他们组通过他们的'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

我的问题是,限制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

这适用的限制的内部查询之前,本集团通过声明是执行。这不重要,该集团通过声明是在外部查询,因为一个集团通过将需要一个临时表格和排序。如果你需要某种形式的顺序连接的结果,可以只是将其应用于外部查询,例如通过施加最大或最小的日期和秩序。

其他提示

这也应该做什么,你想:

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