在为我的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,我也会得到这个结果。
因此,如果有人能给我提示解决这个问题,我真的很赞成。
非常感谢。
答案 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%'