首页 > 解决方案 > PHP确定电子邮件是否在SQL查询结果中出现多次

问题描述

我们正在编写一个小型跟进电子邮件脚本,现在需要确定电子邮件是否在查询结果中出现多次。如果电子邮件只出现一次,则使用电子邮件内容 A,如果出现多次,则使用电子邮件内容 B。

我们使用一个相当标准的 PHP 查询,然后使用一个 while 循环来处理每一行:

// query database followups for rows which fupdate = todays date
require 'user password stuff.php';
$today = date("Y-m-d");

// tourname, email, tourid, fupsent
$fups = $database->query("SELECT * FROM followups WHERE fupdate='$today'");
while ($followup = $fups->fetch(PDO::FETCH_ASSOC))
{
  $email = $followup["email"];
  // check if email appears more than once
  // the code we need...

  if ($emailcount === 1) {
    // include content A in email body
  } else {
    // include content B in email body
  }
}

是否有一种自动神奇的方式来执行这样的任务?或者我们是否仅限于设置另一个查询/while循环来比较电子邮件并计算它匹配一个的次数?

一些额外的说明:

我们只使用一个表,其中包含:fupdate、email、name、productid(加上一些与此函数无关的其他列)。

任何重复的电子邮件都将具有唯一的 productid

--- 整理好了 ---

对于接受的答案,这是一个艰难的选择,两者都有相同的重点,并且彼此在几分钟内就写好了,但奇瑞尔的解释更进一步。

最终版本与最初的概念完全不同,因为现在我们将首先使用COUNT(*)GROUP by email函数来获取要处理的唯一电子邮件列表,然后进行第二次查询,使用JOIN结合后续和产品表来收集客户名称和产品名称和 urls 来构建电子邮件内容。

感谢所有三个提供答案/评论的人,因为他们都为最终的想法做出了贡献。

标签: phpmysql

解决方案


使用查询GROUP BY

SELECT email, count(*) as email_count FROM followups WHERE fupdate='$today' GROUP BY email

$followup数组中,您将有两个键:emailemail_count显示当前电子邮件的计数。


推荐阅读