4

次のクエリを実行するクエリがあるとします。

編集

実際の sql ステートメントには order 句があるため、order 句を追加しました。

SELECT description, amount, id FROM table ORDER BY id

この場合、ID はデータセットに対して一意ではありません。このようなものが返されます。

    Description    Amount    ID
    -----------    ------    --
1    Hats            45       1
2    Pants           16       1
3    Shoes           3        1
4    Dogs            5        2
5    Cats            6        2
6    Waffles         99       3

私がする必要があるのは、ID の各セクションを独自の div で囲むことです (つまり、1 つの div で行 1,2,3、別の div で 4,5、独自の div で 6 行)。

これにはたくさんの解決策がありますが、過度に複雑でない解決策は思いつきません。

データセット全体をループしながら、データセットの各セクションをループできるように、SQL をそのまま維持し、PHP でデータセットを何らかの方法で並べ替えられるようにしたいと考えています。

ある種の配列は機能しますが、その構造が私を困惑させています。

どうすればこれを機能させることができますか? PHPソリューションはアイデアですが、理論的にも役立ちます。

4

4 に答える 4

4

このようなものがあなたのために働くかどうか見てください.

// execute query: Select description, amount, id from table

$results = array();

while ($row = $query_result->fetch_array()) {
    if (!isset($results[$row['id']])) $results[$row['id']] = array();
    $results[$row['id']][] = $row;  // push $row to results for this id
}

// later on
foreach($results as $id => $data) {
    // output div based on $id
    foreach($data as $datum) {
        // output individual data item that belongs to $id
    }
}
于 2012-07-27T20:59:44.000 に答える
3

単純なシリアル ソリューションは次のようになります。

$curId = '';       // track working id
$firstDiv = true;  // track if inside first div

// open first div
echo '<div>';

// foreach $row
{
    // when id changes, transition to new div, except when in first div
    if ($row->$id != $curId) {
        if ($firstDiv) {
            $firstDiv = false;
        } else {
            // start new div
            echo '</div>';
            echo '<div>';
        }
        $curId = $row->$id;  // track new current id
    }

    // display contents of current row
}

// close last div
echo '</div>';
于 2012-07-27T20:58:34.110 に答える
1

データベース結果の連想配列を想定すると、次のようになります。

$final = array();

foreach($results as $result)
{
    $final[$result['id']][] = $result;
}

$finalこれにより、エントリを ID でグループ化する連想配列が残ります。

于 2012-07-27T21:00:36.590 に答える
1

id を一時変数に保存するだけです。次の変数が異なる場合は、div を閉じて新しい div を開きます

于 2012-07-27T20:58:24.470 に答える