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");