我正在尝试编写SQL查询以从数据库中获取数据,但是执行不正确。一切正常,直到我添加了零件
AND adstatus='success'
执行查询没有问题。问题是adstatus
等于数据库中的pending
,但是在使用adstatus
运算符的查询中将success
设置为LIKE
时,它仍然给出所有结果。
这是我的代码:
<?php
$sql = "SELECT * FROM ad WHERE adtitle LIKE '%$keyword%' OR addescription LIKE '%$keyword%' OR adcontactemail LIKE '%$keyword%' AND adstatus='success'";
$result = mysqli_query($conn, $sql);
$queryResult = mysqli_num_rows($result);
if ($queryResult > 0) {
echo 'Results found: '.$queryResult;
} else {
echo 'No results matching your serach!';
}
?>
$queryResult
的值应小于0,因为数据库中的adstatus
的值为pending
,但仍会打印:
Results found: 3
如何同时使用LIKE
运算符和上面的WHERE
条件编写SQL?
答案 0 :(得分:4)
尝试一下
$sql = "SELECT * FROM ad WHERE adstatus='success'
AND ( adtitle LIKE '%$keyword%' OR addescription LIKE '%$keyword%' OR adcontactemail LIKE '%$keyword%' )";
MySQL AND&OR条件允许您测试多个条件。
不要忘记括号的顺序!
答案 1 :(得分:1)
OR条件应放在括号内
SELECT * FROM ad WHERE
adstatus='success' AND
(adtitle LIKE '%$keyword%') OR
(addescription LIKE '%$keyword%') OR
(adcontactemail LIKE '%$keyword%')
答案 2 :(得分:1)
在您的查询中:
sql =“ SELECT * FROM ad WHERE adtitle like'%$ keyword%'或addescription like'%$ keyword%'或adcontactemail like'%$ keyword%'AND adstatus ='success'”;
所以,您有:
并且优先于或to see
这意味着,它将像这样执行:
要满足您的需要,您必须像这样写: