2012-09-20 80 views
1

我有以下結果集解析MySQL的結果集,併合併到倒塌的陣列

ID SUBID DATA 

1 0 Question1 

1 1 Option1 

1 2 Option2 

2 0 Question1 

2 1 Option1 

2 2 Option2 
... 

我真的想要一個數組,看起來像這樣

$item_data[1][1] = ID 1 
$item_data[1][2] = Question1 <br> Option1 <br> Option2 

$item_data[2][1] = ID 2 
$item_data[2][2] = Question2 <br> Option1 <br> Option2 

我已經絞盡腦汁循環內試圖循環和字符串concatination但我不能讓我的結果集看起來像這樣

我試着去得到它變成一個數組,所以我可以再出來把數據 - 其重要的數據保持在一起,但不同的ID是相互

子ID selerate不使用 - 表看起來像這樣由於數據庫設計,我不能改變

select iseg.item_id ,iseg.item_subid, iseg.item_data from items i 
    inner join item_data iseg on iseg.item_id = i.item_id 
union all 
select iseg.item_stg_id ,iseg.item_subid, iseg.item_data from items_stg i 
    inner join item_data_stg iseg on iseg.item_stg_id = i.item_stg_id 
    order by iseg.item_id desc, iseg.item_subid 

第一concatination之前,將項目數據需求分析在PHP

回答

1

假設$resultset是你的mysql結果集,你可以做如下:

while($row = mysql_fetch_array($resulset)) { 
    if (!isset($arr[$row['ID']])) { 
     $arr[$row['ID']][1] = 'ID ' . $row['ID']; 
     $arr[$row['ID']][2] = 'Im data '.$row['ID'].' <br>'; 
    } else { 
     $arr[$row['ID']][2] .= 'Im data '.$row['ID'].' <br>'; 
    } 
} 
foreach ($arr as &$ar) { //remove last <br> from elements 
    $ar[2] = substr($ar[2], 0, -4); 
} 

var_dump($arr); //to check the output 

在你的榜樣,只有三行每個ID,但我上面的代碼允許任意數量的相同ID的行如果這種情況可能發生,這可能很重要。

+0

這個效果非常好 - 只在if行缺少一個括號 – Rob

+0

我很高興它解決了你的問題問題,我會糾正我的答案與你找到的錯字:-) – Nelson

0

讓我們假設你已經導致$result在PHP

現在你可以擁有的數據如下: -

$i=0; 
while($row = mysql_fetch_assoc($result)){ 
    //You can use SUBID. 
    if($row['SUBID']==0) { 
     $i++; 
     $item_data[$i][1]=$row['ID']; 
     $item_data[$i][2]=""; 
    } 

    $item_data[$i][2].+=$row['DATA']."<br>"; 
} 

編輯--- ---- 我會建議使用mysql功率@Alain推薦中的answere here

+0

解析錯誤:語法錯誤,意想不到的T_PLUS_EQUAL – Rob

+0

@Rob如果'SUBID'在數據庫表中給出那麼'爲什麼不把它的好use'? 通過查看錶格設計,我可以肯定地說數據的排序很重要,因此數據庫人員已經在那裏添加了額外的ID。 – Sanuj

+0

@ROB糾正錯誤,那就是用 - '$結果= mysql_fetch_assoc()'現在在回答糾正它應該是'mysql_fetch_assoc($結果)' – Sanuj

1
//adjust fetch method accordingly 
$item_data = array(); 
while ($row = $result->fetch()) { 
    if (!isset($item_data[$row->ID])) { 
     $item_data[$row->ID] = array(1 => 'ID ' + $row->ID, 2 => ''); 
    } 
    $item_data[$row->ID][2] .= ($item_data[$row->ID][2] ? 
     ' <br> ' : '') . $row->DATA; 
} 

爲你描述這應該創建一個數組,但它是一個有點怪異我。 SUBID根本沒有被使用。

+0

如何獲得此工作超過兩行?對於item_data – Rob

+0

它應該適用於'item_data'的無限數量的行..你的意思是第二個數組元素? –

+0

我的意思是如果我有超過2個項目的數據元素 – Rob

1

您也可以使數據庫返回的格式的數據,可能對你會更容易:

SELECT id, group_concat(data) 
FROM my_table 
GROUP BY id 

將返回一排這樣的:

1  Im data 1,Im data 2,Im data 3 

這可能是更容易你來處理。