我有一个搜索表单字段,我想与表中的多个列进行比较,例如:
+----------+-------+---------+------+------------+
| 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/>";
}
如果有任何混淆,请举例说明问题:
用户输入字符串“claws” - &gt;字符串匹配“名称”列中的数据 - &gt;打印列在
中的行用户输入字符串“m” - &gt;字符串仅匹配“性别”列中的数据 - &gt;什么都没有显示!
谢谢你的时间!
答案 0 :(得分:2)
您的查询
$result = $db->query("
SELECT * FROM contact
WHERE first_name LIKE \"%$search%\"
OR second_name LIKE \"%$search%\"
OR company_name LIKE \"%$search%\"
OR email LIKE \"%$search%\"
GROUP BY first_name, second_name, company_name, email
");
似乎属于另一张表。另外,为什么GROUP BY?也许,你的意思是ORDER BY?