2010-12-06 45 views
0

我试着创建一个查询,它将使用一个关键字搜索四个不同的表格,以便将所有在该位置下列出的项目都带入。PHP MYSQL在多个表中搜索相同的关键字

我有四个表 - 国家 - 国家 - 县 - 城市

用于例如英国 - >英格兰 - >西密德兰 - >伯明翰

当西米德兰兹我不会看到所有的项目,包括伯明翰,沃尔索尔下项目的用户类型,伍尔弗汉普顿

这是我想出了

$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

您应该使用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%' 
    -- ... 

这样,你会得到你需要一个包含关键字的列。例如,如果表城市包含{“巴黎”,“Paramatta有”,“波尔图”},使用关键字,并且查询SELECT name FROM city WHERE name LIKE '%Par%'将返回{“巴黎”,“Paramatta有”}

通过顺便说一下,国家,城市之间的联系等,应在落后的数据库中表示:国家< - 国家< - 城市

+0

谢谢你的快速反应。 – SameasBefore 2010-12-07 14:01:02