【问题标题】:PHP MYSQL search same keyword with multiple tablesPHP MYSQL用多个表搜索相同的关键字
【发布时间】:2010-12-06 23:52:47
【问题描述】:

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

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

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

当用户在西米德兰兹输入时,我不会看到所有项目,包括 birmingham、Walsall、wolverhampton 下的项目

这是我想出来的

$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 用多个表搜索相同的关键字

【问题讨论】:

    标签: php mysql search full-text-search


    【解决方案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 ' }

    顺便说一句,国家、城市等之间的联系应该在你的数据库中向后表示:国家

    【讨论】:

    • 感谢您的快速回复。
    • 我不会搜索所有三个列。我不会检查它是否匹配,然后按该列显示列表
    • 例如,如果它关闭状态然后停止并显示所有内容,但如果它与城市匹配,则显示该城市。
    • 还有一些城市不在数据库中,用户可能不会输入自己的城市。这将在另一个表中
    • 对不起,我不知道该怎么解释?
    猜你喜欢
    • 2011-09-28
    • 2013-04-08
    • 2018-12-16
    • 2013-04-25
    • 2010-11-08
    • 2011-03-17
    • 2012-10-30
    • 2021-06-30
    相关资源
    最近更新 更多