PHP MySqli多关键字搜索

时间:2015-09-15 11:27:00

标签: php mysql

我在我的网站上使用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个关键字时,不再有。

4 个答案:

答案 0 :(得分:1)

使用OR而不是AND

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

我希望它会对你有所帮助。

答案 1 :(得分:0)

您需要以某种方式知道用户提供的内容。例如。你想要匹配哪些领域。现在,您假设关键字按特定顺序排列,但是有保证吗?我怀疑如果你不能确定用户将提供所有3个。

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

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

答案 2 :(得分:0)

要获得准确的结果,您应该在查询中使用正则表达式

$ query1 =“j.category_name REGEXP'$ newKeyword [0]'和f.type_name REGEXP'$ newKeyword [1]'和g.city REGEXP'$ newKeyword [2]'”;

答案 3 :(得分:0)

最好的选择是不要试图重新发明轮子,只是在MySQL中使用FULLTEXT索引。然后只需用+(加号)前置所有关键字,然后按普通SELECT搜索。无论订单如何,无论数据库中的字段大小如何,MySQL都会关注您的关键字组合。