如何使用LIKE运算符编写SQL查询

时间:2019-05-01 11:04:15

标签: mysql

我正在尝试编写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?

3 个答案:

答案 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'”;

  1. exp1 = {adtitle like'%$ keyword%'}
  2. exp2 = {类似'%$ keyword%'的addescription}
  3. exp3 = {adcontactemail LIKE'%$ keyword%'}
  4. exp4 = {adstatus ='成功'}

所以,您有:

  • exp1或exp2或exp3和exp4

并且优先于或to see

这意味着,它将像这样执行:

  • exp1 OR(exp2 OR(exp3 AND exp4))

要满足您的需要,您必须像这样写:

  • exp4 AND(exp1或exp2或exp3)