【问题标题】:PHP MySqli Multiple Keyword SearchPHP MySqli 多关键字搜索
【发布时间】:2015-09-15 11:26:59
【问题描述】:

我在我的网站中使用 ajax 搜索。用户可以搜索房屋。我想让用户使用他想要的关键字进行精确搜索。但我的问题是我不知道用户输入了多少关键字我可以搜索。 这是我的查询:

$query = "Select a.*,c.name as agent_name,d.country_name,e.state_name,g.city from #__osrs_properties as a"
                                ." inner join #__osrs_agents as c on c.id = a.agent_id"
                                ." inner join #__osrs_types as f on f.id = a.pro_type"
                                ." inner join #__osrs_categories as j on j.id = a.category_id"
                                ." inner join #__osrs_countries as d on d.id = a.country"
                                ." inner join #__osrs_states as e on e.id = a.state"
                                ." inner join #__osrs_cities as g on g.id = a.city"
                                ." where a.approved = '1' and a.published = '1' and a.category_id = '$category->id' and (";
                        //

                        $newKeyword = explode(" ",$keyword);    
                        $query1="j.category_name like '%$newKeyword[0]%' and f.type_name like '%$newKeyword[1]%' and  g.city like '%$newKeyword[2]%'";

它可以工作,但是当用户只输入 3 个关键字而不是更多时。

【问题讨论】:

  • 你不应该使用 MySQL OR 而不是 AND

标签: php mysql


【解决方案1】:

用 OR 代替 AND

$query1 = "j.category_name like '%$newKeyword[0]%' OR f.type_name like '%$newKeyword[1]%' OR g.city like '%$newKeyword[2]%'";

希望对你有帮助。

【讨论】:

  • 感谢我写的代码没问题。我的问题是我不知道用户输入了多少关键字。也许 3 或也许 5
  • 那么你可以在爆炸后检查 count 然后使用 for-loop 你会得到你想要的答案。希望对你也有帮助。
【解决方案2】:

您需要以某种方式了解用户提供的内容。例如。您要匹配哪些字段。现在,您假设关键字是按特定顺序排列的,但这能保证吗?如果您不能确定用户会提供全部 3 个,我怀疑不会。

我建议将关键字分解为可以确定的字段并将它们单独应用于查询。否则将无法知道提供了 3 个关键字中的哪一个。

您还需要清理用户提供的值以防止恶意注入。

【讨论】:

    【解决方案3】:

    为了得到准确的结果,你应该在查询中使用正则表达式

    $query1="j.category_name REGEXP '$newKeyword[0]' and f.type_name REGEXP '$newKeyword[1]' and g.city REGEXP '$newKeyword[2]'";

    【讨论】:

      【解决方案4】:

      最好的选择是不要尝试重新发明轮子,而只是在 MySQL 中使用 FULLTEXT 索引。然后只需在所有关键字前面加上 +(加号)并按正常 SELECT 搜索。无论数据库中的顺序和字段大小如何,MySQL 都会处理您的关键字组合。

      【讨论】:

        猜你喜欢
        • 2017-08-27
        • 1970-01-01
        • 2013-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-22
        • 1970-01-01
        • 2018-12-16
        相关资源
        最近更新 更多