2012-09-05 110 views
0

我正在做一個圖書館系統的整理和修復雜亂的書名。 我想編寫一個SQL查詢或PHP代碼,用於搜索與一個句子中的MySQL表中的數據匹配的關鍵字。搜索與MySQL中的數據匹配的關鍵字

[tbl_keywords]

id | keyword    | title 
==================================================================== 
1 | Harry Potter  | Harry Potter 
2 | Philosopher's Stone | [Harry Potter] Harry Potter and the Philosopher's Stone 
3 | Chamber of Secrets | [Harry Potter] Harry Potter and the Chamber of Secrets 
4 | Dr. Seuss   | Dr. Seuss 
5 | Green Eggs and Ham | [Dr. Seuss] Green Eggs and Ham 
6 | The Cat in the Hat | [Dr. Seuss] The Cat in the Hat 

例如,

"Harry Potter(1)" => matches 1 
"[Harry Potter] Harry Potter and the Philosopher's Stone(1)" => matches 1 and 2 
"(HARRY POTTER2) THE CHAMBER OF SECRETS" => matches 1 and 3 
"Dr. Seuss - Green Back Book" => matches 4 
"Green eggs and ham" => matches 5 
"the cat in the hat(Dr. Seuss)" => matches 4 and 6 

而且這是可能的(易於實現)?如果它是太多的事情要做,我只需添加變量值到表..

"HarryPotter" => matches 1 
"Dr.Seuss" => matches 4 
"Dr Seuss" => matches 4 

如何做到這一點,將不勝感激任何幫助或想法。提前致謝。

+1

看看這個[* FullText Search(1)*](http://dev.mysql.com/doc/refman/5.0/en/fulltext -search.html)[示例(2)](http://devzone.zend.com/26/using-mysql-full-text-searching/) –

回答

0

在你的SQL條件中使用LIKE。

例子:

$input_search //your search input 
$sql1 = 'Select * from `tbl_keywords` where keyword ="'.$input_search.'"'; 
//...the rest of code 
$sql2 = 'Select * from `tbl_keywords` where keyword LIKE "%'.$input_search.'%" OR title LIKE "%'.$input_search.'%"'; 
//... the rest of code 
//here is IF condition to get the desire result from the sql result you got 
+0

謝謝,但我想檢查$ input_search是否有關鍵字在桌子上。 – chloe

0

JST寫了這樣

$element_to_search='//get here the input to search'; 
$sql2 = 'Select * from `tbl_keywords` where keyword LIKE "%'.$element_to_search.'%" OR title LIKE "%'.$element_to_search.'%"'; 

在你的情況始終把key_element這是搜索之間的兩個 「%HERE%」 將被投入,因爲

「HERE%」的結果將以其開頭的結果和

「%HERE」將結果其關鍵結尾,

但如果你把「%HERE%」它會導致所有將包含「key_element」作爲子字符串的元素。 謝謝

+0

謝謝,但我想要做的是相反的方向,在$ element_to_search的表中搜索關鍵字(s)。 $ element_to_search =「[哈利波特]哈利波特與魔法石(1)」; – chloe

0

代替SQL,PHP stristr用於查找數組中的每個關鍵字。

search in text , and select keywords by php

然後,查找的ID在一個MySQL表來獲得其他的資料/場;標題,類別等

$keywords = array(NULL, 'Harry Potter', 'Philosopher\'s Stone', 'Chamber of Secrets'); 
$input_title = "[Harry Potter] Harry Potter and the Philosopher\'s Stone(1)" 

$keyword_found = array(); 
foreach ($keywords as $key => $val) { 
    if (stristr($input_title, $val)) $keyword_found[] = $key; 
} 

if ($keyword_found) { 
    foreach ($keyword_found as $val) { 
     $sql = "SELECT * FROM `tbl_keywords` WHERE `id` = '" . $val . "'"; 
     ... 
    } 
} 

它不整潔,必須有更好的方法,但..至少它的作品! 再次感謝那些試圖幫助我的人:)