ホームページ バックエンド開発 PHPチュートリアル Mysql ストアド プロシージャ - 半径内の資格のあるユーザーをクエリし、Baidu 座標を介して距離を並べ替えます

Mysql ストアド プロシージャ - 半径内の資格のあるユーザーをクエリし、Baidu 座標を介して距離を並べ替えます

Aug 08, 2016 am 09:31 AM
declare range varchar

以前似たようなアプリケーションを作ったことがありますが、今日見てみたらあまり合理的ではないと感じたので、考え直してクエリストアドプロシージャを作成しました。

テーブルは次のとおりですkm);

@_data、受け入れて戻ります

戻り値の di は、近いものから遠いものまでソートされた距離であり、単位は m です。

ストアド プロシージャを使用しない場合は、それを PHP プログラムに分割できます:

-- ----------------------------
-- Procedure structure for DIS
-- ----------------------------
DROP PROCEDURE IF EXISTS `DIS`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `DIS`(IN `_lat` varchar(11),IN `_lng` varchar(11),IN `_ras` int,INOUT `_data` text)
BEGIN
	DECLARE _sql text ;
	DECLARE EARTH_RADIUS VARCHAR(10) ;
	DECLARE _range VARCHAR(16);
	DECLARE lngR VARCHAR(16);
	DECLARE maxLat VARCHAR(16);
	DECLARE minLat VARCHAR(16);
	DECLARE maxLng VARCHAR(16);
	DECLARE minLng VARCHAR(16);



	SET EARTH_RADIUS = 6378.137;
	SET _range = 180 / pi() * _ras / EARTH_RADIUS;
	SET lngR = _range / cos(_lat * pi() / 180);
	
	SET maxLat = _lat + _range;
	SET minLat = _lat - _range;
	SET maxLng = _lng + lngR ;
	SET minLng = _lng - lngR ;

	SET @_sql = CONCAT('SELECT 
				*, 
				ceil(
					2 * asin(
						sqrt(
							pow(sin((((',_lat,' * PI() / 180.0) - (',_lat,' * PI() / 180.0))) / 2),2) 
							+ cos(',_lat,' * PI() / 180.0) * cos(lat * PI() / 180.0) * pow(sin(((',_lng,' * PI() / 180.0) - (lng * PI() / 180.0)) / 2),2)
						)
					) * ',EARTH_RADIUS,' * 1000
				) AS di 
			FROM dis 
			WHERE lat BETWEEN ',minLat,' AND ',maxLat,' AND lng BETWEEN ',minLng,' AND ',maxLng,' 
			ORDER BY di
			LIMIT 0,10');
	
	PREPARE stmt FROM @_sql;
	EXECUTE stmt;

END
;;
DELIMITER ;
ログイン後にコピー

まず正方形の座標領域を取得し、それを上記の @_sql の SQL を介して SQL ステートメントに結合し、実行します。 。

注意: ここで得られる結果は円形の半径ではなく正方形です。array_filter() など、後の段階で二次フィルタリングを実行できますが、これについてはここでは詳しく説明しません。

上記は、Mysql ストアド プロシージャを紹介しています。Baidu 座標を使用して、ソート後の半径と距離内にある資格のあるユーザーをクエリします。内容の側面も含めて、PHP チュートリアルに興味のある友人に役立つことを願っています。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Oracle Declareの用途は何ですか Oracle Declareの用途は何ですか Sep 15, 2023 pm 01:12 PM

Oracle の宣言の使用には、変数宣言、定数宣言、カーソル宣言、およびサブルーチン宣言が含まれます。詳細な紹介: 1. 変数宣言、PL/SQL ブロックでは、DECLARE 文を使用して変数を宣言できます; 2. 定数は、PL/SQL ブロックで宣言された変更不可能な値です; 3. PL/SQL で使用されるカーソル宣言クエリ結果セットはブロック内で処理されます; 4. サブルーチン宣言. サブルーチンは、PL/SQL ブロック内で定義された再利用可能なコード ブロックです。

PHPは配列内のすべての値を返して配列を形成します PHPは配列内のすべての値を返して配列を形成します Mar 21, 2024 am 09:06 AM

この記事では、PHP が配列のすべての値を返して配列を形成する方法について詳しく説明します。非常に実用的であると編集者が考えたので、参考として共有します。この記事を読んで何かを得ることができれば幸いです。 array_values() 関数の使用 array_values() 関数は、配列内のすべての値の配列を返します。元の配列のキーは保持されません。 $array=["foo"=>"bar","baz"=>"qux"];$values=array_values($array);//$values は ["bar","qux"] になりますループを使用すると、配列のすべての値を手動で取得し、新しい値に追加できます。

JavaでRange関数を使用する方法 JavaでRange関数を使用する方法 Apr 19, 2023 pm 11:49 PM

はじめに Java では、Range メソッドは IntStream クラスと LongStream クラスの両方で使用できます。 IntStream クラスでは、関数パラメータのスコープ内で IntStream の連続した値を返すのに役立ちます。このメソッドでは、startInclusive(inclusive) と endExclusive(exclusive) は増分ステップ サイズとともに使用される 2 つのパラメーターです。前述したように、開始値は含まれ、終了値は除外されます。 LongStream の場合、唯一の違いは LongStream 値の追加です。 Range 構文 Java の range メソッドの構文を見てみましょう。 IntStream 範囲

簡単な言葉で説明: Go 言語範囲の動作原理を徹底的に理解する 簡単な言葉で説明: Go 言語範囲の動作原理を徹底的に理解する Mar 12, 2024 pm 02:18 PM

Go 言語は、多くの側面で独自の設計と機能を備えた、簡潔で強力なプログラミング言語です。最も印象的な機能の 1 つは range キーワードです。これは、配列、スライス、マップ、チャネルなどのデータ構造を反復処理するために使用されます。 range の柔軟性と利便性により、複雑なデータ構造を簡単に調べることができますが、多くの人はその仕組みについて混乱しています。この記事では、range がどのように機能するかを簡単かつ詳細に説明し、読者の理解を深めるために具体的なコード例を使用します。まず、簡単な例を見てみましょう

mysql で varchar 型を使用して日付比較、並べ替え、その他の操作を実装する方法 mysql で varchar 型を使用して日付比較、並べ替え、その他の操作を実装する方法 May 31, 2023 pm 01:49 PM

MySQL の使用中、日付は通常、日時、タイムスタンプ、その他の形式で保存されます。しかし、特別なニーズや歴史的理由により、日付が varchar 形式で保存される場合があります。では、varchar 形式の日付データをどのように処理すればよいでしょうか? ?使用する関数: STR_TO_DATE(str,format) STR_TO_DATE(str,format) 関数は、DATE_FORMAT() 関数の逆関数です。文字列 str とフォーマット文字列 format を受け取ります。 STR_TO_DATE() は、形式文字列に日付と時刻のコンポーネントが含まれている場合、または単語が含まれている場合、DATETIME 値を返します。

Oracle での宣言の使用方法 Oracle での宣言の使用方法 Sep 19, 2023 am 09:44 AM

DECLARE ステートメントは、Oracle で変数、定数、カーソルを宣言するために使用されるキーワードです。 PL/SQL ブロックで使用するデータ オブジェクトを定義および初期化する便利な方法を提供します。 DECLARE 文を使用すると、PL/SQL コードをよりモジュール化して読みやすくすることができます。

巨大なキャデラック エスカレード IQ は、最大 17 万ドルの価格で 760 マイルの航続距離を提供します 巨大なキャデラック エスカレード IQ は、最大 17 万ドルの価格で 760 マイルの航続距離を提供します Sep 30, 2024 am 06:15 AM

伝説のエスカレードをGMが電動化したもので、コンフィギュレーターが新しくなったばかりで、価格はインセンティブ込みで13万ドルから約17万ドルの範囲だ。これは、テスラの C を含む、他のほぼすべての高級電気自動車、ピックアップ、SUV を上回ります。

mysqlのcharとvarcharの違いは何ですか mysqlのcharとvarcharの違いは何ですか Sep 04, 2023 pm 02:16 PM

mysql における char と varchar の違いは次のとおりです: 1. CHAR は固定長ですが、VARCHAR は可変長です; 2. CHAR の保存と検索の効率は高いですが、VARCHAR の保存と検索の効率は高くありません; 3. CHAR はストレージ領域を占有します, VARCHAR を使用すると、ストレージ領域を節約できます。

See all articles