2017-08-01 92 views
0

如果與下面的問題沒有關係,我很抱歉帖子標題。困惑如何給它。PHP set基於條件的變量

例I具有此數據見下表:

DEPARTMENT_ID_FK | EMAIL_ADDRESS 
001    | [email protected] 
002    | [email protected] 
001    | [email protected] 

當我查詢它,是有可能設置這樣的:
如果相同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 : [email protected]@[email protected] 
} 

我要的是在循環,我們可以知道:

DEPARTMENT_ID_FK | EMAIL_ADDRESS 
001    | [email protected], [email protected] 
002    | [email protected] 

任何幫助,將不勝感激。

回答

1

可以讓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    | [email protected],[email protected] 
002    | [email protected] 
-----------------+---------------------------- 

或者只是一對夫婦的循環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); 

Demo

結果:

 
Array 
(
    [0] => Array 
     (
      [DEPARTMENT_ID_FK] => 001 
      [EMAIL_ADDRESS] => [email protected],[email protected] 
     ) 

    [1] => Array 
     (
      [DEPARTMENT_ID_FK] => 002 
      [EMAIL_ADDRESS] => [email protected] 
     ) 

) 
+0

嗨peterm,感謝您的答案,但我得到的錯誤是這樣的:ORA-00923:FROM關鍵字未找到預期。我正在使用Toad –

+0

您正在使用哪個版本的Oracle?你有沒有改變桌子的名字? – peterm

+0

我使用的是Oracle 10.0.2.5,是的,我已更改了我的表名 –

0

簡單的方式來實現自己的目標。

$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; }