我试图根据文件名(ex: page.php?id=5
)显示特定场地的所有事件列表,
然而,基本信息,在这种情况下,场地名称和场地类型与每个事件重复。
以下是它的外观:
以下是代码:
$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>
答案 0 :(得分:2)
对于分组,我通常使用以下模式:
$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