簡體   English   中英

MySQL的喜歡查詢不拉相似的數據

[英]MySQL LIKE query not pulling similar data

我有一個簡單的基於MySQL的搜索腳本,我將僅在下面發布與該問題有關的部分。

$name = 'John Doe';
$query = 'SELECT username FROM members WHERE name LIKE %$name%';

現在的問題是,當我搜索John Doe而不是獲得具有該特定名稱的用戶時,我得到了所有名為JohnDoe用戶,有趣的是,它甚至沒有將John Doe 。 ..您可以在此之前找到John xxxx

是否有高級MySQL屬性來完成此任務?

更改

$query = 'SELECT username FROM members WHERE name LIKE %$name%';

$query = 'SELECT username FROM members WHERE name LIKE "'.%$name%.'"';

要么

$query = "SELECT username FROM members WHERE name LIKE '%$name%'";

請注意,更改為

$query = 'SELECT username FROM members WHERE name LIKE "%$name%"';

不會成功

這是因為單引號字符串不能解釋變量。

注意:與雙引號和heredoc語法不同,特殊字符的變量和轉義序列在單引號引起來的字符串中不會擴展。

但是,會使用雙引號引起來的字符串

雙引號字符串的最重要特征是變量名稱將被擴展。 有關詳細信息,請參見字符串解析。

更新:由於使用了Memolition,因此對其進行了大量編輯和含義更改:)

更改

$query = 'SELECT username FROM members WHERE name LIKE %$name%';

$query = "SELECT username FROM members WHERE name LIKE '%$name%'";

$query = 'SELECT username FROM members WHERE name LIKE "%$name%"';

因為luksch說的雙引號將打印$ name而不是$ name變量值

因此它必須是單引號'這樣的'%name'

所以'單引號適用於stringsvariables

"雙引號僅適用於strings

您需要在用作LIKE比較的字符串周圍加上單引號

實際上,由於您將查詢用單引號引起來,因此真正要查詢的是:

SELECT username FROM members WHERE name LIKE %$name%

文字$name

這樣編寫查詢:

$query = "SELECT username FROM members WHERE name LIKE '%$name%'";

您也可以使用全文本索引(僅MyISAM AFAIR)和MATCH AGAINST子句。 它還將為您提供相似率。 在某些情況下非常有用。 此處的示例: http : //forum.kohanaframework.org/discussion/9182/mysql-full-text-searching-match-against/p1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM