PHP:在 mysql 查询中有和没有工作的组合
PHP: Combination of having and where not working in mysql query
我有一个名为 table 的消息,其中一个条目包含以下内容:
longtitude = 4.867478333333334
latitude = 52.31819833333334
username = 'pb'
如果我在 table 上使用以下查询:
$longitude=4.867478333333334
$latitude=52.31819833333334
$username='pb'
$search=''
$visibledistance=2
使用以下 mysql 查询:
$query=("SELECT
subject,username,message,timestamp,(
6371 * acos (
cos ( radians('$latitude') )
* cos( radians( Messages.latitude ) )
* cos( radians( Messages.longitude ) - radians('$longitude') )
+ sin ( radians('$latitude') )
* sin( radians( Messages.latitude ) )
)
) AS distance FROM Messages WHERE username ='pb' AND ((subject LIKE '%$search%') OR (message LIKE '%$search%')) GROUP BY subject
HAVING distance < '$visibledistance'
ORDER BY timestamp");
$sth = mysql_query($query);
我没有得到任何结果。如果我删除 HAVING distance < '$visibledistance' 我得到所有符合剩余标准的条目,所以除了距离部分之外没有任何问题。有人可以帮助我了解如何正确执行此操作吗?
谢谢!
如果你有数值,你应该避免在变量周围使用单引号
你应该使用 concat 来表示
(因为如果你使用'$visibledistance'你是eval HAVING distance < '4'
(你是eval你距离字符串)
查看您的代码
你没有使用聚合函数,所以你不需要让你可以使用 where (但不是别名)作为 fliter 和 distcint 而不是 group by
$query=("SELECT distinct
subject,username,message,timestamp,(
6371 * acos (
cos ( radians($latitude) )
* cos( radians( Messages.latitude ) )
* cos( radians( Messages.longitude ) - radians($longitude) )
+ sin ( radians($latitude) )
* sin( radians( Messages.latitude ) )
)
) AS distance FROM Messages WHERE username ='pb' AND ((subject LIKE concat('%', '$search', '%')
OR (message LIKE concat('%','$search','%'))
WHERE (
6371 * acos (
cos ( radians($latitude) )
* cos( radians( Messages.latitude ) )
* cos( radians( Messages.longitude ) - radians($longitude) )
+ sin ( radians($latitude) )
* sin( radians( Messages.latitude ) )
)
) < $visibledistance
ORDER BY timestamp");
我有一个名为 table 的消息,其中一个条目包含以下内容:
longtitude = 4.867478333333334
latitude = 52.31819833333334
username = 'pb'
如果我在 table 上使用以下查询:
$longitude=4.867478333333334
$latitude=52.31819833333334
$username='pb'
$search=''
$visibledistance=2
使用以下 mysql 查询:
$query=("SELECT
subject,username,message,timestamp,(
6371 * acos (
cos ( radians('$latitude') )
* cos( radians( Messages.latitude ) )
* cos( radians( Messages.longitude ) - radians('$longitude') )
+ sin ( radians('$latitude') )
* sin( radians( Messages.latitude ) )
)
) AS distance FROM Messages WHERE username ='pb' AND ((subject LIKE '%$search%') OR (message LIKE '%$search%')) GROUP BY subject
HAVING distance < '$visibledistance'
ORDER BY timestamp");
$sth = mysql_query($query);
我没有得到任何结果。如果我删除 HAVING distance < '$visibledistance' 我得到所有符合剩余标准的条目,所以除了距离部分之外没有任何问题。有人可以帮助我了解如何正确执行此操作吗?
谢谢!
如果你有数值,你应该避免在变量周围使用单引号
你应该使用 concat 来表示
(因为如果你使用'$visibledistance'你是eval HAVING distance < '4'
(你是eval你距离字符串)
查看您的代码
你没有使用聚合函数,所以你不需要让你可以使用 where (但不是别名)作为 fliter 和 distcint 而不是 group by
$query=("SELECT distinct
subject,username,message,timestamp,(
6371 * acos (
cos ( radians($latitude) )
* cos( radians( Messages.latitude ) )
* cos( radians( Messages.longitude ) - radians($longitude) )
+ sin ( radians($latitude) )
* sin( radians( Messages.latitude ) )
)
) AS distance FROM Messages WHERE username ='pb' AND ((subject LIKE concat('%', '$search', '%')
OR (message LIKE concat('%','$search','%'))
WHERE (
6371 * acos (
cos ( radians($latitude) )
* cos( radians( Messages.latitude ) )
* cos( radians( Messages.longitude ) - radians($longitude) )
+ sin ( radians($latitude) )
* sin( radians( Messages.latitude ) )
)
) < $visibledistance
ORDER BY timestamp");