1

次の結果セットがあります

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

ループ内のループと文字列の連結を試みて頭を悩ませましたが、結果セットを次のようにすることはできません

データを出力できるように、それを1つの配列に入れようとしています-データは一緒にとどまることが重要ですが、異なるIDは互いに区別されています

SubID は使用されません - 変更できないデータベースの設計により、テーブルは次のようになります

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

4 に答える 4

1

また、データベースがデータをより簡単な形式で返すようにすることもできます。

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

次のような行が返されます。

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

その方が処理しやすい場合があります。

于 2012-09-20T16:16:52.257 に答える
1

mysql の結果セットであると仮定する$resultsetと、次のように実行できます。

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 に 3 つの行しかありませんが、上記のコードでは、同じ ID を持つ任意の数の行が許可されているため、そのような場合に重要になる可能性があります。

于 2012-09-20T16:18:15.330 に答える
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全く慣れません。

于 2012-09-20T16:13:04.580 に答える
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>";
}

EDIT --- ----ここでの回答で @Alain Suggest として mysql パワーを使用することをお勧めします

于 2012-09-20T16:12:39.510 に答える