簡體   English   中英

PHP MySqli多個關鍵字搜索

[英]PHP MySqli Multiple Keyword Search

我在自己的網站上使用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個關鍵字且沒有其他內容時。

使用OR代替AND

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

希望對您有幫助。

您將需要以某種方式知道用戶正在提供什么。 例如,您要匹配哪些字段。 現在,您假設關鍵字按一定順序排列,但是可以保證嗎? 我不確定是否不能確定用戶是否將全部提供3個。

我建議將關鍵字分解為可以確定的字段,並將其分別應用於查詢。 否則,將不可能知道提供了3個關鍵字中的哪個。

另外,您還需要清理用戶提供的值以防止惡意注入。

為了獲得准確的結果,您應該在查詢中使用正則表達式

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

最好的選擇是不要嘗試重新發明輪子,而只是在MySQL中使用FULLTEXT索引。 然后,只需在所有關鍵字前面加上+(加號),然后按常規SELECT進行搜索即可。 MySQL會照顧您的關鍵字組合,而與數據庫中的順序和字段大小無關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM