首先,我的问题有点模糊或混乱,因为我不确定如何将我的问题说成具体。我正在尝试为针织公司(使用PHP的学校项目)查询库存商数据库,但我希望将该城市打印为标题而不是每个库存商信息。
这就是我现在所拥有的:
$sql = "SELECT * FROM mc16korustockists where locale = 'south'";
$result = pg_exec($sql);
$nrows = pg_numrows($result);
print $nrows;
$items = pg_fetch_all($result);
print_r($items);
for ($i=0; $i<$nrows2; $i++) {
print "<h2>";
print $items[$i]['city'];
print "</h2>";
print $items[$i]['name'];
print $items[$i]['address'];
print $items[$i]['city'];
print $items[$i]['phone'];
print "<br />";
print "<br />";
}
我正在查询数据库中的所有数据,行是ref,名称,地址,城市和电话,并执行它。查询行数然后使用它来确定循环运行的迭代次数都很好,但我想要的是h2标题出现在for($ i = 0;)行之上。
试着破坏我的页面,这可能是不可能的。我想我必须计算'city'中的条目数,直到它检测到更改然后将标题更改为我认为的名称?那或者做一堆查询并为每个名字设置一个变量但是在某种程度上,我不妨手动完成(我非常怀疑这是最好的做法)。哦,我欢迎任何批评我的PHP,因为我刚刚开始。
谢谢,如果您需要更多信息,请询问!
P.S。我们的课程正在学习PostgreSQL而不是MySQL,你可以在标签中看到。
答案 0 :(得分:1)
这将解决您的问题:
$sql = "SELECT * FROM mc16korustockists where locale = 'south' order by city";
...
$city = '';
for ($i=0; $i<$nrows2; $i++) {
if($items[$i]['city']!=$city)
{
print "<h2>";
print $items[$i]['city'];
print "</h2>";
$city = $items[$i]['city'];
}
print $items[$i]['name'];
print $items[$i]['address'];
print $items[$i]['city'];
print $items[$i]['phone'];
print "<br />";
print "<br />";
}
答案 1 :(得分:0)
查看上一个项目并检查它是否是同一个城市 - 如果没有,或者没有以前的项目,新城市!
答案 2 :(得分:0)
您需要做的就是跟踪城市的变化,并在变化时进行打印。
我试图让代码与您提供的代码尽可能相似,以便您可以看到更改发生的位置。
// store previous city, set to NULL by default so the first city from the result set will always be printed
// (assuming that the first city from the result set is not null).
$previous_city = NULL;
for ($i=0; $i<$nrows2; $i++) {
// determine what the city is from the current row
// creating a separate variable for this is not really necessary, but helps to make the example clearer
$current_city = $items[$i]['city'];
// check if current city is different to the one in the previous row
if ($previous_city != $current_city) {
// city is different, lets print it
print "<h2>";
print $items[$i]['city'];
print "</h2>";
}
print $items[$i]['name'];
print $items[$i]['address'];
print $items[$i]['city'];
print $items[$i]['phone'];
print "<br />";
print "<br />";
// end of loop, the current city, now becomes the previous city
$previous_city = $items[$i]['city'];
}
请注意,您还需要在SQL中按ORDER BY城市,以便将来自1个城市的所有项目组合在一起,否则此方法将无效