2014-09-22 94 views
0

我正在使用PHP和mysqli從我的數據庫中提取記錄。
TABLE引擎= innoDB

MYSQL V5.5

假設我有這樣的記錄如何在搜索查詢中使用PHP MySql搜索每個單詞

1 |美麗的瑞士女孩|
2 |漂亮的兔子在公園|
3 |自然海|

現在,如果搜索查詢是Beautiful它將返回前2條記錄,但問題是,如果我搜索Beautiful anything,它將返回什麼,但我想在這種情況下要顯示的第2條,因爲它有這個詞beautiful在裏面。我正在使用SELECT * FROM table WHERE name LIKE '%value%' ORDER BY id ASC作爲用於搜索的mysql查詢。

是否有任何其他查詢或方法來實現此目的或唯一可能的選擇是開發一個自定義算法。

+0

如果你能完全貼查詢給到u [R面臨 – Pundit 2014-09-22 11:01:42

回答

0

這將做的工作:

SELECT * FROM table WHERE name LIKE '%Beautiful%' OR name LIKE '%anything%' 

這是你必須使用OR。因此,假設你從什麼地方得到的查詢:

// get your query 
$query = <...somewhere....> 
// explode into words 
$words = explode(' ',$query); 
// write conditions, pay attention to security! 
foreach ($words as $word) 
{ 
    $escaped = ESCAPE($word); // depends the db extension you use 
    $conditions[] = "name LIKE '%$escaped%'"; 
} 
// combine into sql 
$sql = "SELECT * FROM table WHERE ".implode(' OR ',$conditions); 

然後你OR所有查詢的話。

+0

我不知道搜索查詢解決問題我們將不勝感激。這將是動態的。我剛剛給出了一個更好理解的例子。 – 2014-09-22 11:04:12

+0

我也是,我的也只是一個例子。你瞭解'OR'位嗎? – 2014-09-22 11:09:17

+0

o是的,但爲此,我必須制定一個自定義算法來首先爆炸句子,然後計算總詞數,然後相應地進行查詢。我的意思是我正在尋找一種更有效的方法來做到這一點。 – 2014-09-22 11:14:34

0

爲了這個目的,我建議你使用Full-Text Searches。這將完全填補你的要求有關全文搜索,你可以用這個http://viralpatel.net/blogs/full-text-search-using-mysql-full-text-search-capabilities/

經過更多的細節,如果你正在使用innodb代替myisam引擎不會試圖在這個環節也

http://mechanics.flite.com/blog/2014/07/08/fine-tuning-mysql-full-text-search-with-innodb/

+0

我試過,但發現引擎需要設置爲'MYISAM',問題是'MYISAM'不允許外鍵。 – 2014-09-22 11:08:56

+0

啊,你用的是innodb? – 2014-09-22 11:09:30

+0

是的我的表引擎是'innoDB' – 2014-09-22 11:10:25