所以,如果我使用此代碼SELECT * FROM user where BINARY LOWER(name) LIKE LOWER('%{$search}%')
如果我搜索字LEE,然後,所有使用LEE的字母將出現。 最喜歡S LEE P,LEE YONE,U LEE,LEE OPARD等 而更糟的是,如果我搜索的字母 「A」 一切都將出現。如何在每個單詞中查找mysql中的數據?
只能按每個單詞嗎?也許,如果我搜索詞LEE,它只會LEE YONE
所以,如果我使用此代碼SELECT * FROM user where BINARY LOWER(name) LIKE LOWER('%{$search}%')
如果我搜索字LEE,然後,所有使用LEE的字母將出現。 最喜歡S LEE P,LEE YONE,U LEE,LEE OPARD等 而更糟的是,如果我搜索的字母 「A」 一切都將出現。如何在每個單詞中查找mysql中的數據?
只能按每個單詞嗎?也許,如果我搜索詞LEE,它只會LEE YONE
嘗試WHERE name REGEXP '[[:<:]]LEE[[:>:]]'
另外,如果您的排序規則設置爲一個合理的值,你不需要LOWER()
。
您的查詢SELECT * FROM user where BINARY LOWER(name) LIKE LOWER('%{$search}%')
返回üLEE當你$搜索LEE因爲通配符(%跡象)在你的搜索詞。
如果你改變它SELECT * FROM user where BINARY LOWER(name) LIKE LOWER('{$search}')
您$搜索LEE將只返回那些正是LEE條目。
如果你也想LEE YONE回來,你需要查詢更改爲SELECT * FROM user where BINARY LOWER(name) LIKE LOWER('{$search}%')
(搜索詞後注意%)。
,它也會返回「LEEOPARD」; OP顯然不想要...... –
請與下面的查詢嘗試;
SELECT * FROM user where BINARY LOWER(name) LIKE LOWER('% {$search} %') OR LOWER(name) LIKE LOWER('{$search} %') OR LOWER(name) LIKE LOWER('% {$search}')
SELECT * FROM用戶那裏BINARY LOWER(名稱)等低級( '{$搜索}%')或二進制LOWER(名稱)等低級( '%{$搜索}')或二進制LOWER(名稱) LIKE LOWER('%{$ search}%')或BINARY LOWER(name)LIKE LOWER('{$ search}') – Ruby
爲什麼你明確地使用'binary'比較然後強制轉換*你的關鍵字**並將您的數據**改爲小寫以獲得不區分大小寫(=非二進制)的比較,同時完全**排除所有潛在索引優點**並可預測*在大型表格中查殺您的性能? –
您應該在$ search變量的開始和結尾添加單個空格,如下所示:'$ search =「」。 $搜索。 「」;'然後在查詢中使用這個變量。 或者您可以在查詢中添加空格,就像這樣:'SELECT * FROM user where BINARY LOWER(name)LIKE LOWER('%{$ search}%')' 這是因爲空間是單獨字符串。 –