4

假设我有一个查询,运行以下查询:

编辑

添加 order 子句,因为真正的 sql 语句有一个。

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中(因此一个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

只需将 id 存储在 temp 变量中,如果下一个不同,请关闭 div 并打开新 div

于 2012-07-27T20:58:24.470 回答
1

假设 db 结果的关联数组:

$final = array();

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

这为您留下了一个关联数组$final,该数组按 ID 对条目进行分组

于 2012-07-27T21:00:36.590 回答