我有以下结果集
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中进行解析
答案 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