【问题标题】:PHP: Concatenating database results by emailPHP:通过电子邮件连接数据库结果
【发布时间】:2013-09-02 01:23:50
【问题描述】:

我有一个分配给多个用户的任务列表。我想设置一个 cron 作业并每小时向每个用户发送一次电子邮件通知。这是我的查询:

SELECT t.*, u.name, u.email
FROM tasks t, users u
WHERE t.date_created > DATE_SUB(NOW(), INTERVAL 1 HOUR) AND t.user_id = u.id
ORDER BY t.date_created ASC

这是结果(我修剪了几列以更好地适应):

+----+-------+---------------------+---------+--------+------+--------------+
| id | title |     date_created    | user_id | status | name |     email    |
+----+-------+---------------------+---------+--------+------+--------------+
| 9  | task1 | 2013-09-01 17:56:10 |    2    | active | John | js@gmail.com |
| 10 | task2 | 2013-09-01 17:57:20 |    1    | active | Tim  | ti@gmail.com |
| 11 | task3 | 2013-09-01 17:58:30 |    2    | active | John | js@gmail.com |
| 12 | task4 | 2013-09-01 17:59:40 |    1    | active | Tim  | ti@gmail.com |
+----+-------+---------------------+---------+--------+------+--------------+

问题是我不知道如何连接属于某个 user_id 的任务,然后将它们发送到分配的电子邮件。因此,对于上面的示例,将发送两封电子邮件:

  1. task1 和 task 3(发给 js@gmail.com)
  2. task2 和 task 4(发送至 ti@gmail.com)

【问题讨论】:

  • 我不确定您要什么,但请尝试GROUP BY emailGROUP BY user_id

标签: php mysql


【解决方案1】:

尝试使用GROUP_CONCAT 聚合命令:

SELECT GROUP_CONCAT(t.title), u.name, u.email
FROM tasks t, users u
WHERE t.date_created > DATE_SUB(NOW(), INTERVAL 1 HOUR) AND t.user_id = u.id
GROUP BY u.id 

这将输出类似:

task1,task3 | John | js@gmail.com
task2,task4 | Tim  | ti@gmail.com

默认是逗号分隔的字符串,但您可以指定另一个分隔符,如下所示:GROUP_CONCAT(t.title,' and ')

【讨论】:

  • 谢谢!您也可以使用SELECT GROUP_CONCAT(t.title) as title 更改列标题。
猜你喜欢
  • 2015-04-19
  • 2019-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-31
  • 1970-01-01
  • 1970-01-01
  • 2011-10-07
相关资源
最近更新 更多