2011-11-16 43 views
0

我有一個ajax搜索引擎。如果沒有過濾器打開,我想查詢每個表格的標題。在這個例子中,只有兩個表。 music_page和restaurant_page。查詢多個表格輸出重複結果

public function Any_Category_Name($search_title) { 

       $query = mysql_query("SELECT music_page.title AS music_title, 
              restaurant_page.title AS restaurant_title 
             FROM music_page, 
              restaurant_page 
             WHERE music_page.title 
              LIKE '%$search_title%' OR 
               restaurant_page.title 
               LIKE '%$search_title%'"); 
       while($fetch = mysql_fetch_assoc($query)) { 
        $music_title = $fetch['music_title']; 
        $restaurant_title = $fetch['restaurant_title']; 
        echo '<b>Restaurant:</b> '.$restaurant_title.'<br />'; 
        echo '<b>Music Spot:</b> '.$music_title.'<br />'; 
        } 

       } 

這是輸出,當你輸入一個字母/搜索:

Restaurant: Giordanoes 
Music Spot: jazz showcase 
Restaurant: Giordanoes 
Music Spot: The Green Mill 
Restaurant: Giordanoes 
Music Spot: ayooooo 
Restaurant: Giordanoes 
Music Spot: ayoooooooo 
Restaurant: Giordanoes 
Music Spot: new one 

Giordanoes是restaurant_page表中唯一的一行。它會輸出到music_page中的每一行。我該如何補救?

+0

要加入兩個表(music_page和restaurant_page)一起表music_page有多對一的關係表restaurant_page –

回答

1

替代

while($fetch = mysql_fetch_assoc($query)) { 
    // Create the listing array 
    $listing[$fetch['restaurant_title']] = array($fetch['music_title'] => 'music_title'); 
} 

// Check if we have Restaurants 
if(is_array($listing)) { 
    // Loop through the new listings array 
    foreach($listing as $restaurant_title => $music_titles) { 
     echo '<b>Restaurant:</b> '.$restaurant_title.'<br />'; 

     // Check if we have Music 
     if(is_array($music_titles)) { 
      // Loop through the Music 
      foreach($music_titles as $music_title => $placeholder) { 
       echo '<b>Music Spot:</b> '.$music_title.'<br />'; 
      } 
     } else { 
      echo '<b>Music Spot:</b> No Music found<br />'; 
     }    
    } 
} else { 
    echo '<b>Restaurant:</b> No Restaurants found<br />'; 
} 
+0

工作。但是,如果沒有結果,它說foreach中的無效論證。而且,它僅爲每個頁面輸出一個結果。 – Graham

+0

@Graham更新。但每頁? –

+0

非常感謝菲爾。它不再給予foreach錯誤。但是,它仍然只能爲音樂和餐廳輸出一個結果。它應該是音樂的倍數。 – Graham

1

您需要研究正確加入表格的方法。如您所知,您將從restaurant_page表中獲得music_page表中每條記錄的記錄。

我建議W3schools.com

一種替代方法是有兩個查詢,每個選擇記錄從一個單獨的表,以及兩個while循環,以輸出結果,一個接一個。

+0

http://w3fools.com/ – NullUserException

+0

@NullUserExceptionఠ_ఠ好悲傷,男人。 – DaveL

+0

W3Schools是一個可怕的網站,不應該被用作參考。 – NullUserException

1

這正是您連接表時發生的情況。我通常所做的只是循環而已,如果從最後一個循環改變,只輸出餐廳。像:

$last = ''; 
while($fetch = mysql_fetch_assoc($query)) { 
    $music_title = $fetch['music_title']; 
    $restaurant_title = $fetch['restaurant_title']; 
    if($last != $restaurant_title){ 
     echo '<h1>Restaurant: '.$restaurant_title.'</h1>'; 
    } 
    echo '<b>Music Spot:</b> '.$music_title.'<br />'; 
    $last = $restaurant_title; 
} 
+0

你在哪裏設置$最後? –

+0

doh!修好了,即使有點晚了。 –