我有我想要一個表如內的多個列來比較搜索表單域:MySQL查詢中的多個LIKE比較? - MySQL和PHP
+----------+-------+---------+------+------------+
| name | owner | species | sex | birth |
+----------+-------+---------+------+------------+
| Claws | Gwen | cat | m | 1994-03-17 |
| Bowser | Diane | dog | m | 1989-08-31 |
| Whistler | Gwen | cat | m | 1997-12-09 |
+----------+-------+---------+------+------------+
我所做的查詢有多個LIKE比較但它只是似乎找到數據行了前兩列。
第一個比較是 「名」,然後 「所有者」,然後 「種」,然後 「性」。
只有輸入與前兩列匹配的字符串時纔會查找行,但如果輸入的字符串與最後一列中的某一列匹配,則不會返回任何內容。
下面是該查詢:
SELECT * FROM contact
WHERE name LIKE \"%$search%\"
OR owner LIKE \"%$search%\"
OR species LIKE \"%$search%\"
OR sex LIKE \"%$search%\"
GROUP BY name, owner,species, sex
我唯一的猜測是MySQL可能限制多少「OR」是你可以使用嗎?
如果用戶輸入的字符串與任何列數據匹配,我的查詢應該從表中返回一行。
這是我的PHP代碼它
include("database.class.php");
//search string assigned from POST field
$search = $_POST['contact_search'];
$db = new database();
$db->select('quote_system');
$result = $db->query("SELECT * FROM contact WHERE name LIKE \"%$search%\" OR owner LIKE \"%$search%\" OR species LIKE \"%$search%\" OR sex LIKE \"%$search%\" GROUP BY name, second_name, owner, species, sex");
print_r($result);
while ($row = $db->fetch_assoc($result))
{
echo $row['name'];
echo $row['owner'];
echo $row['species'];
echo $row['sex'];
echo "<br/>";
}
櫃面那裏有這裏的任何混亂是一些例子,說明這個問題:
用戶輸入字符串「魔爪」 - 在>字符串匹配數據「name」列 - >打印該列所在的行
用戶輸入字符串「m」 - >字符串只匹配「sex」列中的數據 - >沒有顯示!
謝謝你的時間!
哦,不,另一個SQLi –
只是一個提示。不要這樣做。您的查詢沒有可用的索引,這意味着全表掃描*多次*。 – Layke
@Martin - SQLi? – kaleeway