標籤:
1 //預存程序,利用已知的經緯度查詢其他文章距離自己的距離。juli的演算法是網上拿的 2 //如果存在就刪除這個預存程序 3 >> drop procedure if exists `get_distance`; 4 //設定預設結束符為%% 5 >> delimiter %% 6 //開始建立語句,4個參數,in 表示輸入值,可以省略;格式: in 變數名 類型 7 >> create procedure get_distance (in lng_put decimal(12,8),in lat_put decimal(12,8),in where_str varchar(255),in limit_str varchar(100)) 8 //開始建立預存程序內容 9 begin10 //if 判斷,注意括弧內為一個等號。。還有then11 if(limit_str = ‘‘) then12 set @limit = ‘‘;13 else14 set @limit = concat(‘ ‘,limit_str);15 //end if 後面要加分好16 end if;17 if(where_str = ‘‘) then18 set @where = ‘‘;19 else 20 set @where = concat(‘ ‘,where_str,‘ ‘);21 end if;22 //拼接sql語句23 set @sql_str = concat(‘select *,ROUND(6378.138*2*ASIN(SQRT(POW(SIN((‘,lat_put,‘*PI()/180-latitude*PI()/180)/2),2)+COS(‘,lat_put,‘*PI()/180)*COS(latitude*PI()/180)*POW(SIN((‘,lng_put,‘*PI()/180-longitude*PI()/180)/2),2)))*1000) AS juli FROM gd_bbs_article ‘,@where,‘ORDER BY juli asc‘,@limit);24 //準備sql語句25 prepare temp from @sql_str;26 //執行sql語句27 execute temp;28 //結束29 end%%30 //還原31 >> delimiter ;32 //刪除此預存程序33 >> drop procedure get_distance%%34 35 //查看36 show procedure like ‘%name%‘
調用過程
1 $sql = ‘call get_distance(112.075387,24.053732,"","limit 0,10")‘;2 $res = mysql_query($sql);3 //var_dump($res . mysql_error());4 while(($row = mysql_fetch_assoc($res)) !== false) {5 print_r($row);6 }
寫yi一個mysql預存程序