这是我的查询:
$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/