Mysql ストアド プロシージャ - 半径内の資格のあるユーザーをクエリし、Baidu 座標を介して距離を並べ替えます
以前似たようなアプリケーションを作ったことがありますが、今日見てみたらあまり合理的ではないと感じたので、考え直してクエリストアドプロシージャを作成しました。
テーブルは次のとおりですkm);
@_data、受け入れて戻ります
戻り値の di は、近いものから遠いものまでソートされた距離であり、単位は m です。
-- ---------------------------- -- 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 チュートリアルに興味のある友人に役立つことを願っています。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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

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