【问题标题】:AND, OR output wrong resultAND, OR 输出错误结果
【发布时间】:2010-10-08 09:25:38
【问题描述】:

假设我使用 2 个AND 和一个OR 来检索结果,首先在name 上输入文本值进行测试,我可以获得正确的结果,但是当我将$getc 更改为空字符串以外的任何值时,结果不变,只查询name值。怎么了?

$query1 = "SELECT * FROM $tableName WHERE name LIKE '%$asd%' OR descriptions LIKE
    '%$asd%' AND category='$getc' AND company_type='$dsp' LIMIT $start, $limit";

【问题讨论】:

    标签: php mysql operators operator-precedence


    【解决方案1】:

    尝试将() 放在name LIKE '%$asd%' OR descriptions LIKE '%$asd%' 周围:

    $query1 = "SELECT * FROM $tableName WHERE (name LIKE '%$asd%' OR descriptions LIKE '%$asd%') AND category='$getc' AND company_type='$dsp' LIMIT $start, $limit";
    

    上面写着categorycompany_type 必须匹配并且至少有一个 namedescriptions 必须匹配。

    原因:

    a OR b AND c AND d 
    

    被视为ANDprecedenceOR 更高

    a OR (b AND c AND d)
    

    但你想要的是:

    (a OR b) AND c AND d 
    

    【讨论】:

    • 奇怪的是,在我发布这个问题之前放了一个括号后仍然没有结果。
    • 好的,我设法让它正确使用 !empty() 来验证每个参数,如果有值则将它们添加到 mysql 语句中。
    • 是的,谢谢,但我没有帐户。我在mysql中体验过,有时代码太多让我的大脑变得混乱。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    • 2022-07-08
    相关资源
    最近更新 更多