嵌套循环总是让我困惑

Mar*_*rty 0 php loops for-loop while-loop

所以我有一个基于两个查询嵌套在另一个循环中的循环.我有第一个循环工作正常 -

$sql_categories = mysql_query("SELECT * FROM $categories_table");

$results = mysql_query("SELECT * FROM $events_table");
    while ($num_rows = mysql_fetch_assoc($sql_categories)) {
        extract($num_rows);
        echo "<h2>$category_name</h2>";
        // Begin second loop to output events
        while/for(not sure) {

    }
}
Run Code Online (Sandbox Code Playgroud)

我想输出所有$vars相应的第二个循环$category_id.在第二个查询中,匹配值为$event_category_id.

我不知道这是否有意义,但我想要得到的基本上是 -

<h2>Category One</h2>
Event Name
Event Name
Event Name

<h2>Category Two</h2>
Event Name
Event Name
Event Name
Run Code Online (Sandbox Code Playgroud)

其中"事件名称"对应于"类别名称"

我正在使用的两张桌子看起来像这样 -

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
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

Tat*_*nen 5

你需要做的第二个查询内部 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>";
    }
}
Run Code Online (Sandbox Code Playgroud)

这可以让你到达你想要的地方,但请注意,这不是最佳的做事方式.您应首先获取所有事件,构建一个由event_category_id索引的数组,并在while循环中循环该数组.这是因为现在您每个类别都要进行一次额外查询,而总共只有两个查询就足够了.

但也许这会让你开始.