【问题标题】:how to get almost same word from database based on one word using php and mysql如何使用php和mysql根据一个单词从数据库中获取几乎相同的单词
【发布时间】:2014-06-07 11:05:05
【问题描述】:

我需要根据数据库中的一个词获得几乎相同的词。

例如,我的数据库中有 Online Shopping 这个词。

如果我给出了 online shopOnline shoponline 之类的任何词,则表示必须获得 Online Shopping只要。

现在我正在使用下面的选择代码。但它不能正常工作。

**SELECT words FROM atab WHERE words LIKE '%".$words."%'**

注意:words - 列名,atab - 表名,

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    我发现最好的方法是将部分匹配返回到用户输入的任何单词。对它们进行相关性排序是完全不同的事情,但至少让您的搜索开始工作

    对于以下内容,我假设您可以让用户搜索到一个名为 $search 的变量,如下所示:

    $search='Online Shopping';
    

    现在,将用户输入拆分为单个单词:

    $mSearch=explode(" ", $search);
    

    现在我们有了一个搜索项数组。

    这样,我们就可以进行合理的搜索查询:

    $sql="SELECT words FROM atab WHERE ";
    $or="";
    foreach($mSearch as $val)
    {
        $sql.=$or." words like '%".$val."%'";
        if(!$or)
        {
            $or=" or ";
        }
    }
    

    这将输出如下 SQL:

    SELECT words FROM atab WHERE words like '%Online%' or words like '%Shopping%'
    

    您可以很好地针对您的数据库运行。

    完整代码:

    <?php
    
        $search='Online Shopping';
        $mSearch=explode(" ", $search);
        $sql="SELECT words FROM atab WHERE ";
        $or="";
        foreach($mSearch as $val)
        {
            $sql.=$or." words like '%".$val."%'";
            if(!$or)
            {
                $or=" or ";
            }
        }
        echo $sql;
    ?>
    

    如果您开始比较不同但具有相同含义的单词,事情会立即变得复杂几个数量级。

    【讨论】:

    • 您输出的查询似乎错误。 SELECT words FROM atab WHERE 或 '%Online%' 之类的词或 '%Shopping%' 之类的词。它有“哪里或”在里面。
    • @fortune 我拒绝了该编辑,因为if(!$or) 条件只有在我最初设置的$or 中没有任何内容时才会通过。只要里面有值,条件就会返回false,if不会输入。
    • @fortune 抱歉,我在顶部修复了代码,但没有在底部修复。我将$sql.=$or." words like '%".$val."%'"; 移动到if 语句的上方。对不起,混淆了。
    • 现在完美了。伟大的。 +1
    猜你喜欢
    • 2013-07-30
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 2022-01-25
    • 2015-06-25
    • 2018-04-10
    相关资源
    最近更新 更多