假设我有一个查询运行以下查询:
添加了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解决方案是理想的,但理论也会有所帮助。
答案 0 :(得分: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
}
}
答案 1 :(得分: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>';
答案 2 :(得分:1)
只需将id存储在temp变量中,如果下一个不同,请关闭div并打开新div
答案 3 :(得分:1)
假设db结果的关联数组:
$final = array();
foreach($results as $result)
{
$final[$result['id']][] = $result;
}
这将为您留下一个关联数组$final
,它按ID