2010-02-15 5 views
0

그래서 두 개의 쿼리를 기반으로 다른 루프 안에 중첩 될 루프가 있습니다. I는 해당 $category_id 대한 2 루프 모든 $vars로 출력 I 원하는를 미세중첩 된 루프는 항상 나를 혼동합니다

$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) { 

    } 
} 

워킹 1 루프를 갖는다. 두 번째 쿼리에서 일치하는 값은 $event_category_id입니다.

나는 그 의미가 있는지 알고 있지만, 내가 무엇을 얻으려고하는 것은 basically--하지 않는

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

<h2>Category Two</h2> 
Event Name 
Event Name 
Event Name 

등 "이벤트 이름"은 "범주 이름"

에 해당하는 경우

두 테이블 나는 당신의 도움을 this-

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 

덕분에 같은 표정으로 일하고 있어요!

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

이 당신이 원하는 당신을 얻을해야하지만,이에 대한 최적의 방법이 아니다 있습니다 : 그것은 의미있는 영향을 미칠 수 있도록

답변

5

당신은 내부 while 루프를 두 번째 쿼리 을 할 필요가 어떤것을하다. 먼저 모든 이벤트를 가져 와서 event_category_id로 인덱싱 된 배열을 만들고 while 루프 내에서 해당 배열을 반복해야합니다. 이는 이제 각 카테고리 당 하나의 추가 쿼리를 수행하는 반면 총 두 개의 쿼리만으로 충분하기 때문입니다.

하지만 아마도 이것으로 시작하게 될 것입니다.

+1

이것은 완벽하게 작동했고 당신이 옳았습니다. DB에 대한 적중 횟수는 최적이 아니었지만, 해커가 많은 PHP에서는 제게 적합합니다. 페이지가 내가 원하는 것을하고 나면 당신이 제안하는대로 그것을 향상시킬 것이다. 감사! – Marty