PHP MYSQL搜索具有多个表的相同关键字

时间:2010-12-06 23:52:47

标签: php mysql search full-text-search

我正在尝试创建一个查询,该查询将使用一个关键字搜索四个不同的表,以将列表下的所有项目带到该位置。

我有四张桌子 - 国家 - 国家 - 县 - 城市

例如英国 - >英格兰 - >西米德兰兹郡 - >伯明翰

当用户输入西米德兰兹时,我不会看到所有物品,包括伯明翰,沃尔索尔,伍尔弗汉普顿下的物品

这就是我提出的

$location = $_POST['location'];
$city_sql = " SELECT * FROM city";

$city_result = $db->query( $city_sql );
$new_array=array();
$i=0;
while ($fetch_sql = $db->fetch_object($city_result) ){

    if ( strcmp(soundex(strtolower($fetch_sql->name)), soundex(strtolower($location))) == 0 ) { 
        $new_array[$i]['name'] = $fetch_sql->name;
        $new_array[$i]['code'] = $fetch_sql->name;
        $i++; 
    }
}

$k=0;
for ( $j=0; $j < sizeof($new_array); $j++ ){
    $i = similar_text(strtolower($new_array[$j]['name']), strtolower($db->escape_value($location)), &$similarity_pst);
    if( $i > $k && $i > 7 ){
        $k = $i;
            $city_db_name = $new_array[$j]['name'];
            $city_code = $new_array[$j]['code'];
    }
}

如果您有任何想法,请告诉我。

PHP MYSQL搜索具有多个表的相同关键字

1 个答案:

答案 0 :(得分:1)

您应该使用SQL功能来获取数据,而不是PHP。

如果我正确理解,您希望从多个表和多个列中获取数据。 像这样更改您的查询:

SELECT
  -- list of considered columns
  col1,
  col2,
  col3
  -- ...
FROM
  City
JOIN
  State ON State.state_id = City.state_id
JOIN
  Country ON Country.country_id = State.country_id
WHERE
  col1 LIKE '%keyword%'
  OR col2 LIKE '%keyword%'
  OR col3 LIKE '%keyword%'
  -- ...

就像这样,您将获得包含关键字所需的列。例如,如果表格City包含{'Paris','paramatta','Porto'},则使用关键字 Par ,查询SELECT name FROM city WHERE name LIKE '%Par%'将返回{'Paris', 'paramatta'}

顺便说一下,国家,城市等之间的联系应该在数据库中向后表示:国家&lt; - 州&lt; - 城市