2011-09-21 93 views
0

我有一個用於工作人員來搜索用戶帳戶的搜索表單。我希望搜索表單從用戶那裏接受輸入並搜索與其匹配的用戶的數據庫。這裏是我的數據庫結構...CodeIngniter數據庫搜索

用戶表 - >(ID,FNAME,LNAME,IP_ADDRESS ....等)

下面是我用在我的模型如何搜索用戶。 ..

$this->db->or_like('fname', $query); 
$this->db->or_like('lname', $query); 
$this->db->or_like('email', $query); 

$this->db->or_where('ip_address', $query); 

$query = $this->db->get('users'); 

這對大多數搜索很有用。例如....

搜索:比爾

回報所有用戶名字或票據的姓氏.....

然而,對於一個姓和名的搜索沒有按」即使有用戶匹配,也不會返回用戶。例如....

搜索:比爾·蓋茨

,搜索不與比爾的FNAME和蓋茨的L-NAME回報用戶。我能做些什麼來完成這項工作?

回答

6

你必須按摩搜索詞爲多個獨立的條款。 CI將編寫查詢爲:

WHERE fname LIKE '%Bill Gates%' OR lname LIKE '%Bill Gates%' etc... 

它永遠不會匹配,因爲「比爾·蓋茨」在單場不會出現在數據庫中。但是,如果你單獨每個單詞拆分成多個字,(BillGates),並添加到or集,你會得到匹配。

如果您使用的是MyISAM表格,另一種選擇是在3個字段中使用全文索引,即使賬單是一個字段而另一個門是另一個字段,也會找到'bill gates'。

InnoDB的顯然全文支持現在實際上終於在發展管道,但現在它仍然只MyISAM的生產代碼。

0

既然你在數據庫拆分的姓和名,並使用相同的變量兩個or_like()調用,你只能搜索一個詞。

你必須字符串爲「」(空格)分開,並調用or_like()爲每個零件或使用形式3個獨立的輸入字段(恕我直言更好的主意)。