我有一个mysql'客户端电子邮件'包含客户端ID和分配给这些客户端ID的电子邮件地址的表,每个客户端可以有多个已分配的电子邮件;并且客户端电子邮件表不断更新并添加到,因此我没有设置client_ids列表。
'client-emails'
client_id | email
============
27 | email1@client27domain
27 | email2@client27domain
42 | email1@client42domain
42 | email2@client42domain
42 | email3@client42domain
46 | email1@client46domain
我有一个电子邮件PHP脚本,每天晚上使用cron作业向这些客户发送一封电子邮件。这很好,但现在我们需要按照client_id对这些电子邮件进行个性化设置,因此我需要为每个客户端分割每个客户端的电子邮件组,并且当电子邮件发送时,它知道哪组逗号分隔的电子邮件到在" To"每个client_id的字段,以及提取客户端ID的电子邮件正文中的变量。
To: $clientEmails
and within the message there'll be a "Your ID is: $clientId".
i.e.,
To: email1@client27domain,email2@client27domain
And in the message will be:
Your ID is: 27
不确定这是否正确,但我在以下查询中一直在玩GROUP_CONCAT:
$sql = "SELECT client_id, GROUP_CONCAT(email) AS emails FROM portal_client_report_emails GROUP BY client_id ORDER BY client_id ASC";
并且正在做:
$grouped = array();
foreach ($rows as $item) {
$grouped[$item['client_id']][] = $item;
}
转出:
array (
27 =>
array (
0 =>
array (
'client_id' => '27',
'emails' => 'email1@client27domain,email2@client27domain',
),
),
42 =>
array (
0 =>
array (
'client_id' => '42',
'emails' => 'email1@client42domain,email2@client42domain,email3@client42domain',
),
),
46 =>
array (
0 =>
array (
'client_id' => '46',
'emails' => 'email1@client46domain',
),
),
)
我是否能够循环遍历该数组,以告诉我的$ to mail()中的变量,以便为每个内容电子邮件发送每个client_id的单独电子邮件?
对于我的邮件测试,我目前只使用基本的mail()函数:
$to = (needs to emails per respective client ID);
$subject = "Client Details";
$message = "Your Client ID: " . $clientID;
mail($to,$subject,$msg);
我可以请求$ to变量帮助我做我需要的吗?谢谢!
更新:以下内容仅为每个client_id抓取第一个电子邮件地址。
"SELECT client_id,email...";
$data = array();
while($row = mysqli_fetch_array($rows)){
$data[$row['client_id']][] = $row['email'];
}
答案 0 :(得分:2)
不要使用group_concat。这需要多个记录并将其折叠为SINGLE值。它对结果字符串也有一个长度限制,并且会静默截断超出限制的任何内容,从而使您丢失数据并可能损坏“最终”数据。
只需使用常规查询:
SELECT id, email ...
然后使用循环:
$data = array();
while($row = ... fetch ...) {
$data[$row['id']][] = $row['email'];
}
这将为您提供一个漂亮的2D数组的ID和电子邮件地址,无需UNDO任何连接或其他 - 您只需按原样开始使用地址,无需进一步处理:
foreach($data as $id => $addresses) {
foreach($addresses as $addr) {
send("Hi, $addr, your id is $id");
}
}