【问题标题】:How to use the OR statement in MySQL while using the LIKE search statement如何在 MySQL 中使用 LIKE 搜索语句时使用 OR 语句
【发布时间】:2010-10-06 20:57:05
【问题描述】:

我正在尝试创建一个很好的小搜索语句,根据返回的内容使用不同的搜索词搜索多个字段。我基本上是在设置一个我想搜索的顺序,如果找不到一个搜索词,请尝试下一个。但是,我使用 WHERE 子句来单独搜索一种类型的数据。目前我收到了一些奇怪的结果,因为我认为我的订单不正确,似乎我的 WHERE 子句被忽略了。

这是我的声明(我使用 PHP):

mysql_query("SELECT * FROM item AS i LEFT JOIN country AS c ON i.country_id = c.country_id WHERE i.item_status = 'active' AND (i.item_name LIKE '%".$_SESSION['item']."%') OR i.item_description LIKE '%".$_SESSION['description']."%' OR i.item_name LIKE '%".$_SESSION['description']."%' "); 

提前谢谢你。

【问题讨论】:

    标签: php mysql search search-engine sql-like


    【解决方案1】:

    为什么不使用全文搜索功能?

    需要更改表结构以创建全文搜索索引。

    ALTER TABLE item ADD FULLTEXT (item_name, item_description);
    

    然后你的查询变成:

    mysql_query("
    SELECT * FROM item AS i LEFT JOIN country AS c ON i.country_id = c.country_id 
    WHERE i.item_status = 'active' AND 
    MATCH (i.item_name, i.item_description)
    AGAINST (" . $_SESSION['item'] . " " . $_SESSION['description'] . ");
    ");
    

    简单、准确、快速。

    【讨论】:

    • 如果你喜欢它,你需要看看Postgre的FTS功能。您可以设置字段的相关性。非常适合文章、教程等。
    【解决方案2】:

    将右括号移到语句末尾:

    SELECT * 
    FROM item AS i LEFT JOIN country AS c 
    ON i.country_id = c.country_id 
    WHERE i.item_status = 'active' 
    AND (i.item_name LIKE '%".$_SESSION['item']."%' 
    OR i.item_description LIKE '%".$_SESSION['description']."%' 
    OR i.item_name LIKE '%".$_SESSION['description']."%')
    

    【讨论】:

      【解决方案3】:

      是你的括号放错了地方。这是正确的代码:

      mysql_query("SELECT * FROM item AS i LEFT JOIN country AS c ON i.country_id = c.country_id WHERE i.item_status = 'active' AND (i.item_name LIKE '%".$_SESSION['item']."%' OR i.item_description LIKE '%".$_SESSION['description']."%' OR i.item_name LIKE '%".$_SESSION['description']."%')");
      

      【讨论】:

        【解决方案4】:

        OR 运算符的优先级低于 AND 运算符。 http://dev.mysql.com/doc/refman/4.1/en/operator-precedence.html

        将所有 OR 放在括号内(一个包含所有 OR,而不是每个 OR 一个;))。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-10-12
          • 1970-01-01
          • 1970-01-01
          • 2011-04-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多