Mysql查询中的条件不起作用

时间:2013-04-15 15:04:44

标签: php mysql

在为我的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 london

然后我得到:

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

似乎上次AND条件也存在问题。我将在该示例中更改邮政编码:

streetname london 12345

没关系,即使使用错误的zipcode,我也会得到这个结果。

因此,如果有人能给我提示解决这个问题,我真的很赞成。

非常感谢。

3 个答案:

答案 0 :(得分:1)

AND具有比OR更严格的绑定优先级,因此您的第一个表达式被视为:

(`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%')

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

答案 1 :(得分:0)

你必须在选择中隔离他们的questinonamentos ...

zipcode LIKE'12345%'和city LIKE'london%')或(street LIKE'london%'和city LIKE'streetname%')或(street LIKE'streetname%')

答案 2 :(得分:0)

使用括号对条件进行分组,如下所示:

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