仅在变量发生变化时才打印变量?

时间:2012-10-29 22:56:48

标签: php postgresql

首先,我的问题有点模糊或混乱,因为我不确定如何将我的问题说成具体。我正在尝试为针织公司(使用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,你可以在标签中看到。

3 个答案:

答案 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个城市的所有项目组合在一起,否则此方法将无效