Sjoerd是正確的。關係數據庫設置絕對是最好的解決方案。 我不知道關於MySQL FIND_IN_SET(),但你可以分析出用戶的關鍵字並撰寫字符串,因此您的搜索查詢會因爲這樣的事情結束了:
SELECT * FROM `information` WHERE MATCH(`keyword`) AGAINST('keyword1 keyword3' IN BOOLEAN MODE)
在這種情況下,您的對陣應該返回如果它匹配任何一個。
您應該記住,「關鍵字」列必須全文索引,以便與工作匹配,並且僅匹配服務器上php.ini配置中定義的最小字符數。在大多數情況下,默認值是4個字符。 換句話說,您的關鍵字必須是4個或更多字符以使用匹配。 話雖這麼說,你可以設置你的查詢字符串做這樣的事情:
$user_keywords = array('keyword1', 'keyword3');
if(count($user_keywords) == 1)
{
$word = $user_keywords[0];
if(strlen($word) >= 4)
{
$query_str = "MATCH(`keyword`) AGAINST ('".$word."' IN BOOLEAN MODE)";
}
else
{
$query_str = "`keyword` LIKE '%".$word."%'";
}
}
else
{
$query_str = "";
foreach($user_keywords AS $key)
{
$query_str .= "`keyword` = '".$key."' OR ";
}
$query_str = substr($query_str, 0, -3);
}
$sql = "SELECT * FROM `information` WHERE ".$query_str;
無論哪種方式,你這樣做,你真的應該用你的數據庫轉換爲關係建立開始,除非你別無選擇 - 像你正在使用你沒有編碼的第三方軟件包,它將需要永久轉換。
另外,%在那裏作爲部分匹配的例子。如果您需要更多解釋,請告訴我們。
來源
2010-06-17 19:25:41
Kai
謝謝你的建議,我會盡我所能在我能夠儘快更改數據庫結構 – user220755 2010-06-17 20:09:30
我得到了不是唯一的表/別名:信息 – user220755 2010-06-17 20:40:32
沒關係,明白了:) – user220755 2010-06-17 20:47:19