php - 查询未正确过滤结果

标签 php mysql

这是我的查询:

$sql = "SELECT * , (3956 * 2 * ASIN(SQRT( POWER(SIN(('$lat' - lat) *  pi()/180 / 2), 2) +COS('$lat' * pi()/180) * COS(lat * pi()/180) * POWER(SIN(('$lon' - lon) * pi()/180 / 2), 2) ))) as distance  from posts WHERE posts.subname LIKE '%$subject%' AND posts.pricing <= '$rate' ".$add_here." GROUP BY posts.UUID having  distance <= '$distance' order by distance";

在浏览器中,

SELECT * , 
(3956 * 2 * ASIN(SQRT( POWER(SIN(('2.993518' - lat) * pi()/180 / 2), 2) + 
COS('2.993518' * pi()/180) * COS(lat * pi()/180)
 * POWER(SIN(('101.7874058' - lon) * pi()/180 / 2), 2) ))) 
    as distance
from posts 
WHERE posts.subname LIKE '%tamil%' 
AND posts.pricing <= '161' 
AND posts.morning IN ('sun') 
OR posts.afternoon IN ('sun') OR posts.evening IN ('sun','mon') 
GROUP BY posts.UUID 
having distance <= '40' 
order by distance

我遇到的问题是,此查询的结果不会过滤子名称。它只是过滤 AND posts.pricing <= '161' AND posts.morning IN ('sun') OR posts.afternoon IN ('sun') OR posts.evening IN ('sun','mon') .

只要上午、下午、晚上字段匹配就返回不过滤subname LIKE %tamil%的结果.

我希望查询在上午、下午和晚上字段中搜索与 subname LIKE %tamil%. 匹配的行请问我该如何改变这种方式?

最佳答案

问题出在您的 WHERE 子句中。

WHERE posts.subname LIKE '%tamil%' 
AND posts.pricing <= '161' 
AND posts.morning IN ('sun') 
OR posts.afternoon IN ('sun') OR posts.evening IN ('sun','mon') 

如果我理解你的意思,你是想说选择: “%tamil%”AND 定价<161 AND(上午、下午或晚上)

因为您省略了括号,所以该子句适用于下午或晚上。

我相信您想这样做:

WHERE posts.subname LIKE '%tamil%' 
AND posts.pricing <= '161' 
AND (posts.morning IN ('sun') 
    OR posts.afternoon IN ('sun') 
    OR posts.evening IN ('sun','mon')) 

关于php - 查询未正确过滤结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34585334/

相关文章:

php - 如何通过mysql在php中回显表

再次执行 fetch_assoc() 后的 php mysql 结果

mysql - 使用group_concat后如何计算以 ','分隔的列的长度

php - 通过 PHP 表单在数据库中插入值

javascript - 仅在第一次加载 js 文件-在 angularjs : Making the ckeditor visible for first time only 中

javascript - 如果用户没有输入任何字符,我该如何禁用我的搜索框?

php - mysql php用价格分组开始日期和结束日期

python - MySQL Python 关于重复键更新值

php - 选择有值(value)的列

php - 多次上传未保存到数据库