查询多个表会输出重复的结果

时间:2011-11-16 21:02:02

标签: php mysql

我有一个ajax搜索引擎。如果没有打开过滤器,我想查询每个表中的标题。在此示例中,只有两个表。 music_page AND 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中的每一行输出的。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

您需要了解正确加入表格的方法。如您所见,您将从restaurant_page表中获取music_page表中每条记录的记录。

我建议W3schools.com

另一种方法是有两个查询,每个查询从一个单独的表中选择记录,两个while循环一个接一个地输出结果。

答案 1 :(得分: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;
}

答案 2 :(得分: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 />';
}