嵌套循环总是让我困惑
问题描述:
所以我必须嵌套基于两个查询另一循环内循环。我第一个循环工作细嵌套循环总是让我困惑
我要输出到第二循环中的所有$vars
为相应$category_id
。在第二个查询中,匹配值是$event_category_id
。
我不知道如果是有道理的,但我想要得到的是basically--
<h2>Category One</h2>
Event Name
Event Name
Event Name
<h2>Category Two</h2>
Event Name
Event Name
Event Name
等,其中“事件名称”对应于“类别名称”
两个表我与外观类似的工作这 -
CREATE TABLE `wp_wild_dbem_categories` (
`category_id` int(11) NOT NULL auto_increment,
`category_name` tinytext NOT NULL,
PRIMARY KEY (`category_id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
CREATE TABLE `wp_wild_dbem_events` (
`event_id` mediumint(9) NOT NULL auto_increment,
`event_author` mediumint(9) default NULL,
`event_name` tinytext NOT NULL,
`event_start_time` time NOT NULL default '00:00:00',
`event_end_time` time NOT NULL default '00:00:00',
`event_start_date` date NOT NULL default '0000-00-00',
`event_end_date` date default NULL,
`event_notes` text,
`event_rsvp` tinyint(1) NOT NULL default '0',
`event_seats` tinyint(4) default NULL,
`event_contactperson_id` mediumint(9) default NULL,
`location_id` mediumint(9) NOT NULL default '0',
`recurrence_id` mediumint(9) default NULL,
`event_category_id` int(11) default NULL,
UNIQUE KEY `event_id` (`event_id`)
) ENGINE=MyISAM AUTO_INCREMENT=26 DEFAULT CHARSET=latin1
感谢您的帮助!
答
你需要做的第二个查询内 while循环它有任何意义的影响:
$sql_categories = mysql_query("SELECT * FROM $categories_table");
while($category = mysql_fetch_assoc($sql_categories)) {
extract($category);
$events = mysql_query("SELECT * FROM $events_table WHERE event_category_id = '".mysql_real_escape_string($category_id)."'");
echo "<h2>$category_name</h2>";
while($event = mysql_fetch_assoc($events) {
extract($category);
echo "<p>$event_name</p>";
}
}
这应该把你带到你想要的,但请注意,这不是最佳的方式做事。您应该首先获取所有事件,按照event_category_id建立索引的数组,并在while循环内循环该数组。这是因为现在你正在为每个类别做一个额外的查询,而总共只有两个查询就足够了。
但也许这将让你开始上即可。
这完美地工作,你说得对,这不是最优的命中数据库的数量,但对我来说,我hackerish PHP,它的工作原理。一旦页面正在做我想做的事情,我会根据你的建议来改进它。谢谢! – Marty 2010-02-15 19:41:09