2011-11-16 212 views
0

搜索:「化學家」多個LIKE,或MySQL查詢匹配

問題:查詢將匹配像「onechemist」而非「化學家」的字符串。

SELECT id,name FROM `records` 
WHERE name LIKE '%". mysql_real_escape_string($q) ."%' 

此備用試都不行:

SELECT id,name FROM `records` 
WHERE name LIKE '%". mysql_real_escape_string($q) ."%' 
OR name LIKE '". mysql_real_escape_string($q) ."%' 
OR name LIKE '%". mysql_real_escape_string($q) ."' 

我怎麼能編譯上面成一個單一的查詢,將匹配它具有字符串的任何字段或優化查詢到一個更好的表達?

+1

你的第一個查詢*開始應*匹配''chemist''爲好。根據[手冊](http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html),'%'是一個通配符,可以匹配任意數量的字符,甚至爲零字符」 – NullUserException

回答

1

如果$q持有「化學家」,它將匹配name也是「化學家」。在這種情況下,您的第一個查詢應該可以工作嘗試雙重檢查你的值。

$sql = "SELECT `id`, `name` FROM `records` 
WHERE `name` LIKE '%".mysql_real_escape_string($q)."%'"; 

PS - 您的第二個查詢將獲得與第一個相同的結果。

0

您可以對此使用正則表達式。例如,

SELECT id,name FROM `records` where name REGEXP '^onechemist' 

它將匹配名稱與onechemist