在mysql查询中使用php函数

时间:2014-05-09 08:38:57

标签: php mysql sql

我正在创建一个按位置选择内容的查询 - 我需要以一种在查询期间检查产品是否距离用户位置2英里半径的方式进行选择,问题是检查是在另一个PHP函数,并且据我所知,我不能在查询结束之前从数据库调用带有param的php函数。

由于

需要使用的功能:

public static function vincentyGreatCircleDistance(
      $latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $earthRadius = 6371000)
    {
      // convert from degrees to radians
      $latFrom = deg2rad($latitudeFrom);
      $lonFrom = deg2rad($longitudeFrom);
      $latTo = deg2rad($latitudeTo);
      $lonTo = deg2rad($longitudeTo);

      $lonDelta = $lonTo - $lonFrom;
      $a = pow(cos($latTo) * sin($lonDelta), 2) +
        pow(cos($latFrom) * sin($latTo) - sin($latFrom) * cos($latTo) * cos($lonDelta), 2);
      $b = sin($latFrom) * sin($latTo) + cos($latFrom) * cos($latTo) * cos($lonDelta);

      $angle = atan2(sqrt($a), $b);
      return $angle * $earthRadius;
    }

我的查询(没有位置):

SELECT * FROM `products` WHERE `name` LIKE '%iphone%' OR `name` LIKE '%5s%'

我想做什么

SELECT * FROM `products` WHERE `name` LIKE '%iphone%' OR `name` LIKE '%5s%' AND vincentyGreatCircleDistance($lat, $long, `lat`,`long`) < 2

由于

2 个答案:

答案 0 :(得分:0)

您可能正在寻找存储过程 - 请参阅MySQL manual有关如何将函数转换为MySQL过程的信息。

答案 1 :(得分:0)

我建议可能有两种方式:


1)尝试看看你是否可以将PHP函数转换为MySQL存储函数。 MySQL有自己的数学运算库。一旦你有相同的存储函数,你可以像调用任何其他MySQL系统函数一样直接调用它(甚至在WHERE子句中进行比较)。它将被视为与任何其他列一样。


2)如果你无法转换你的PHP函数,     
你可以使用tmp表。
这样的事情:

  
      
  • CREATE TEMPORARY TABLE tmp AS SELECT * FROM products WHERE name LIKE'%iphone%'或name LIKE'%5s%';
  •   
  • ALTER TABLE tmp ADD COLUMN vincentyGreatCircleDistance DOUBLE;
  •   
  • 通过tmp结果集循环
  •   
    while(tmp_resultset->row()){
       $r_lat=row->lat;
       $r_long=row->long;
       $vincentyGreatCircleDistance=vincentyGreatCircleDistance($lat, $long, $r_lat, $r_long);
       query_object("UPDATE SET vincentyGreatCircleDistance=IF(".$vincentyGreatCircleDistance.",".$vincentyGreatCircleDistance.",0) WHERE id=".row->id;
    }
  
      
  • SELECT * FROM tmp;
  •   

希望这有帮助:)