Php Mysql查询中的条件不起作用

Php Mysql查询中的条件不起作用,php,mysql,Php,Mysql,我在为我的Live搜索引擎创建查询时遇到问题 表的结构如下所示: street | zipcode | city col1.: streetname | 12345 | london col1.: otherstreet | 12345 | london 我的问题如下: 当我搜索12345 london streetname时,对于简单的查询,我会得到错误的结果。当我回显查询时,我得到以下结果: `zipcode` LIKE '12345%' AND

我在为我的Live搜索引擎创建查询时遇到问题

表的结构如下所示:

           street   | zipcode | city

col1.:  streetname  | 12345   | london
col1.:  otherstreet | 12345   | london
我的问题如下:

当我搜索
12345 london streetname
时,对于简单的查询,我会得到错误的结果。当我回显查询时,我得到以下结果:

`zipcode` LIKE '12345%' AND `city` LIKE 'london%' OR `street` LIKE 'london%' AND `city` LIKE 'streetname%' OR `street` LIKE 'streetname%'
我使用以下方法获取结果:

$where = ...

$query = $db->query("SELECT * FROM table WHERE $where");
$result = $query->num_rows;
    if ($result !== 0 ){
        echo $result;

        while ($row = $query->fetch_assoc()) {

            echo 
                $row["zipcode"], 
                ' ', 
                $row["city"]';

        }

    } 
奇怪的是,当我将输入顺序更改为:

streetname 12345伦敦

然后我得到:

`city` LIKE 'streetname%' OR `street` LIKE 'streetname%' AND `city` LIKE 'london%' OR `street` LIKE 'london%' AND `zipcode` LIKE '12345%'
最后的
条件似乎也有问题。我将在该示例中更改zipcode时:

streetname伦敦12345

这并不重要,即使使用错误的zipcode,我也会得到这个结果

所以如果有人能给我一些提示来解决这个问题,我真的很感激


非常感谢。

的绑定优先级比
更高,因此您的第一个表达式被视为:

(`zipcode` LIKE '12345%' AND `city` LIKE 'london%')
OR (`street` LIKE 'london%' AND `city` LIKE 'streetname%')
OR (`street` LIKE 'streetname%')
第二个解析为:

(`city` LIKE 'streetname%')
OR (`Strasse` LIKE 'streetname%' AND `city` LIKE 'london%')
OR (`street` LIKE 'london%' AND `zipcode` LIKE '12345%')

您需要使用显式括号来指定实际希望条件组合的方式。

您必须在选择中隔离它们的questinonamento

试一试


zipcode
如“12345%”和
city
如“london%”或(
street
如“london%”和
city
如“streetname%”)或(
street
如“streetname%”)使用parentesis对条件进行分组,如下:

(`zipcode` LIKE '12345%' AND `city` LIKE 'london%') OR (`street` LIKE 'london%' AND `city` LIKE 'streetname%') OR `street` LIKE 'streetname%'
1) 运算符优先级(2)括号