2015-09-15 209 views
1

我在我的網站中使用ajax搜索。用戶可以在家中搜索。我想讓用戶用他想要的關鍵字精確搜索。但我的問題是,我不知道用戶輸入了多少關鍵字可以搜索。 這是我的查詢:PHP MySqli多個關鍵字搜索

$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個關鍵字,也沒有更多的。

+0

不應該使用MySQL'OR'而不是'AND'嗎? –

回答

1

使用或者替代和

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

我希望這會幫助你。

+0

感謝我寫的代碼是可以的。我的問題是我不知道用戶鍵入了多少關鍵字。也許3或者5 –

+0

然後你可以在爆炸後檢查_count_然後使用** for-loop **你會得到你想要的答案。希望它也能幫助你。 –

0

您將需要以某種方式知道用戶正在提供什麼。例如。你想匹配什麼領域。現在,你認爲關鍵字是按照一定的順序,但是有保證嗎?我懷疑,如果你不能確定用戶將提供全部3.

我建議將關鍵字分解成可確定的字段並將它們單獨應用於查詢。否則,將無法知道3個關鍵字中的哪一個被提供。

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

0

爲了得到確切的結果,你應該在查詢

$ QUERY1 =「j.category_name REGEXP '$ newKeyword [0]' 和f.type_name REGEXP '$ newKeyword [1]' 和g.city使用正則表達式REGEXP'$ newKeyword [2]'「;

0

最好的選擇不是試圖重新發明輪子,只是在MySQL中使用FULLTEXT索引。然後,只需在+(加號)前添加所有關鍵字,然後用普通的SELECT進行搜索。 MySQL會照顧你的關鍵字組合,不管順序如何,也不管數據庫中的字段大小如何。