Php Mysql查询中的条件不起作用
我在为我的Live搜索引擎创建查询时遇到问题 表的结构如下所示: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
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)括号