2010-02-15 93 views
0

所以我必須嵌套基於兩個查詢另一循環內循環。我第一個循環工作細嵌套循環總是讓我困惑

我要輸出到第二循環中的所有$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 

感謝您的幫助!

回答

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>"; 
    } 
} 

這應該把你帶到你想要的,但請注意,這不是最佳的方式做事。您應該首先獲取所有事件,按照event_category_id建立索引的數組,並在while循環內循環該數組。這是因爲現在你正在爲每個類別做一個額外的查詢,而總共只有兩個查詢就足夠了。

但也許這將讓你開始上即可。

+1

這完美地工作,你說得對,這不是最優的命中數據庫的數量,但對我來說,我hackerish PHP,它的工作原理。一旦頁面正在做我想做的事情,我會根據你的建議來改進它。謝謝! – Marty 2010-02-15 19:41:09