MySQL查询中的多个LIKE比较? - MySQL,PHP

时间:2012-01-24 09:55:09

标签: php mysql sql-like

我有一个搜索表单字段,我想与表中的多个列进行比较,例如:

+----------+-------+---------+------+------------+
| 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;什么都没有显示!

谢谢你的时间!

1 个答案:

答案 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?