[英]PHP set Variable based on condition
如果帖子标题与下面的问题无关,我感到很抱歉。 困惑如何给它。
示例我有下面的数据表:
DEPARTMENT_ID_FK | EMAIL_ADDRESS
001 | a@example.com
002 | b@example.com
001 | c@example.com
当我查询它时,是否可以这样设置:
如果相同DEPARTMENT_ID_FK,则将其显示为基于DEPARTMENT_ID_FK的变量组合值
while($dData = oci_fetch_array($q))
{
$email = $dData['EMAIL_ADDRESS']; // I know when I echoing this variable, it will be like : a@example.comb@example.comc@example.com
}
我想要的是循环,我们可以知道是否:
DEPARTMENT_ID_FK | EMAIL_ADDRESS
001 | a@example.com, c@example.com
002 | b@example.com
任何帮助,将不胜感激。
您可以让Oracle为您做汇总
甲骨文11
SELECT DEPARTMENT_ID_FK,
LISTAGG(EMAIL_ADDRESS, ',')
WITHIN GROUP (ORDER BY EMAIL_ADDRESS) AS EMAIL_ADDRESS
FROM table1
GROUP BY DEPARTMENT_ID_FK
甲骨文10
SELECT DEPARTMENT_ID_FK,
RTRIM(XMLAGG(XMLELEMENT(e, EMAIL_ADDRESS, ',')
ORDER BY EMAIL_ADDRESS).EXTRACT('//text()').GETCLOBVAL(), ',') AS EMAIL_ADDRESS
FROM table1
GROUP BY DEPARTMENT_ID_FK
这是两个查询的dbfiddle演示
结果:
DEPARTMENT_ID_FK | EMAIL_ADDRESS -----------------+---------------------------- 001 | a@example.com,c@example.com 002 | b@example.com -----------------+----------------------------
或者只是通过几个循环和一个条件聚合在php中
$agg = [];
while ($dData = oci_fetch_array($q)) {
$dep = $dData['DEPARTMENT_ID_FK'];
$email = $dData['EMAIL_ADDRESS'];
if (isset($agg[$dep])) {
$agg[$dep][] = $email;
continue;
}
$agg[$dep] = [$email];
}
$result = [];
foreach ($agg as $dep => $emails) {
$result[] = [
'DEPARTMENT_ID_FK' => $dep,
'EMAIL_ADDRESS' => implode(',', $emails),
];
}
print_r($result);
结果:
Array ( [0] => Array ( [DEPARTMENT_ID_FK] => 001 [EMAIL_ADDRESS] => a@example.com,c@example.com ) [1] => Array ( [DEPARTMENT_ID_FK] => 002 [EMAIL_ADDRESS] => a@example.com ) )
实现目标的简单方法。
$email = array(); while($dData = oci_fetch_array($q)) { $email[$dData['DEPARTMENT_ID_FK']] = (isset($email[$dData['DEPARTMENT_ID_FK']]) && $email[$dData['DEPARTMENT_ID_FK']] != '' ? ', ' : '').$dData['EMAIL_ADDRESS']; } foreach ($email as $key=>$val){ echo $key . ' => '. $val; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.