信息在while循环中重复

时间:2012-03-20 20:58:09

标签: php mysql

我试图根据文件名(ex: page.php?id=5)显示特定场地的所有事件列表,

然而,基本信息,在这种情况下,场地名称和场地类型与每个事件重复。

以下是它的外观:

enter image description here

以下是代码:

$id = (int) $_GET['id'];
$data = mysql_query("
SELECT 
    venues.*,
    venue_types.TYPE_NAME,
    events.EVENT_NAME,
    events.EVENT_DESC
FROM 
    venues
INNER JOIN venue_types
ON venues.VENUE_TYPE = venue_types.ID
INNER JOIN events
ON events.VENUE_LOCATION = venues.ID
WHERE
    events.VENUE_LOCATION = venues.ID
AND 
    venues.id = ".$id) or die(mysql_error());



while($info = mysql_fetch_array( $data )) 
 {
Print "Venue name:" . $info['VENUE_NAME'] . "<BR>";
Print "Venue Type:" . $info['TYPE_NAME'] . "<BR><BR>";

echo "Event name:" . $info['EVENT_NAME'] . "<BR>";
echo "Event description:" . $info['EVENT_DESC'] . "<BR>";

感谢阅读!

编辑:kirilloid的信息

我的意思是列表将位于页面的中间,其中包含其他内容,这些内容可能也可能不会从MySQL中检索到,我不想复制。我的意思是,如果代码看起来更简单:

echo "<html> la la la
  <Body>
  la la la MYSQL_ROW la la la
  la la la
  stuff I don't want looped";

echo "
  ------------------------
  LOOPED LIST
  ------------------------
";

echo "
  more stuff I don't want looped
  la la la MYSQL_ROW_ALSO la la la
</body></html>

2 个答案:

答案 0 :(得分:2)

对于分组,我通常使用以下模式:

  • 创建一些变量以跟踪以前的值
  • 如果当前值相同,则不执行任何操作
  • 否则更新跟踪变量并回显新的分组标题。
顺便说一下,我在SO上发现了一个bug。在没有这样的行的列表之后,代码没有被格式化为代码。

$last_venue_name = null;
while (...) {
    if ($last_venue_name != $info['VENUE_NAME']) {
        $last_venue_name = $info['VENUE_NAME'];
        Print "Venue name:" . $info['VENUE_NAME'] . "<BR>";
        Print "Venue Type:" . $info['TYPE_NAME'] . "<BR><BR>";
    }

将所有数据提取到2-dim数组,即

$infos = array(
    mysql_fetch_array($data),
    mysql_fetch_array($data)
)

你不想重复的东西:

echo $infos[0]['VENUE_NAME']

out loop stuff:

foreach($infos as $info) {
   echo $info['EVENT_NAME']

再重复一次。

在从数组中读取if (!empty($infos))元素之前,您需要先检查:0

如果我知道,所有记录中只会有一个不同的VENUE_NAME,我会使用2个单独的SQL个查询。

答案 1 :(得分:1)

您必须首次获取数据以输出场地名称和场地类型,然后将其余部分放入while循环中。

或者在场地名称和类型周围放置一个if()并使用布尔值来确保它只输出一次。

编辑以进一步解释(评论太小了!):

没问题,简而言之,查询返回一组数据,您可以一次循环访问一个数据。您只能在发出获取阵列命令后调用数据。在您的情况下,您调用数据,根据您的查询为您提供一行,然后调用打印数据。对于查询的返回集中存在的每一行,它将遍历循环。

Kirilloid给出了一个很好的例子,如果你想要我也可以把它组合在一起。这是最简单的方法。我实际上不应该提到第一个例子,因为从长远来看它更有说服力,所以反而只是忽略它! :d