php - 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 来构建电子邮件内容。
感谢所有三个提供答案/评论的人,因为他们都为最终的想法做出了贡献。
解决方案
使用查询GROUP BY
:
SELECT email, count(*) as email_count FROM followups WHERE fupdate='$today' GROUP BY email
在$followup
数组中,您将有两个键:email
将email_count
显示当前电子邮件的计数。
推荐阅读
- c++ - 如何将 char a= '+'(或 string[]) 变成真正的操作?
- gpflow - GP + TensorFlow 培训
- spring - 如何使用 AWS CodeDeploy 和/或 CloudFormation 配置 application.properties?
- powershell - 如何仅要求前 3 个参数的输入参数并使最后一个参数默认?
- javascript - 音频流与ios音频播放器的交互
- haskell - 在 Haskell 中定义一个函数 replicat lt
- java - 如何修复错误:不是数组上带有 += 的语句
- reactjs - 使用 Firebase 检测用户名的唯一性并做出反应 js
- node.js - 查询嵌套数组
- c - 试图建立一个以字符串为条目的链表