解析MySQL结果集并合并到折叠数组

时间:2012-09-20 16:02:35

标签: php sql-server

我有以下结果集

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

我绞尽脑汁在循环和字符串连接中尝试循环,但我不能让我的结果集看起来像这样

我试图把它放到一个数组中,这样我就可以输出数据了 - 重要的是数据保持在一起但不同的ID彼此相互衔接

未使用SubID - 由于db设计我无法更改

,因此表格如下所示
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

项目数据需要在连接之前首先在PHP中进行解析

4 个答案:

答案 0 :(得分: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根本没有被使用。

答案 1 :(得分:1)

您还可以使数据库以更容易的格式返回数据:

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

将返回如下行:

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

可能更容易处理。

答案 2 :(得分: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的行,因此如果发生这种情况,这可能很重要。

答案 3 :(得分:0)

让我们假设你在php中有$result的结果

现在您可以获得如下数据: -

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

编辑--- ---- 我建议在answere here

中使用mysql power作为@Alain Suggest