問題タブ [stored-functions]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mysql - この MySQL ストアド関数が、クエリで計算を実行する場合とは異なる結果をもたらすのはなぜですか?
これは、「最も近い場所を見つける」機能が必要なプロジェクトで使用するために、harsine 式を使用して地球上の緯度と経度の 2 点間の距離を計算することに関する質問です。
hasersine 式は、この投稿で MySQL でよく説明され、解決されています。
次に、数式を長い形式で検索、記憶、または再入力することなく、将来のプロジェクトで使用できるように、それをストアド関数に変換することについてこの質問をしました。
大丈夫だよー。私の関数は結果が(わずかに)異なり、数式をクエリに直接入力するだけで、他のすべての条件は同じです。どうしてこれなの?
だからここに私が書いた関数があります:
例として、ロンドン アイとバッキンガム宮殿の間の距離を見つけるために設定された一連のテスト クエリを次に示します。明らかに、通常、目的地を、比較したい地理的に配置された「もの」のデータベースのフィールドに置き換えます。
この例では、マイルを使用しているため、半径 (テストでは@milesModifier 、関数ではradius ) を正確に 3959 に設定しました。
返された結果は興味深いものでした (MySQL 5.2.6 コミュニティ エディションで)。ハイライト:
longFormatはクエリで実行される計算であり、distanceMilesは関数の結果です。
結果は異なります...プロジェクトで関数を使用する限り、それは重要ではありませんが、関数の内部または外部で同じ式がどのように異なる結果になるかを知りたいです。
私はそれがFLOATの長さに関係していると推測しています-それらは関数で指定されていません.私が持っているすべての数値と出力に十分なスペースを与えるためにそれらを指定しようとしました(30,15まで)期待していますが、結果はまだわずかに異なります。
php - 必要な php ファイルにすべての関数を含めますか、それとも必要な関数だけを含めますか?
これが私がやりたいことです。
最初のオプションは、各関数をそれぞれ異なるphpファイルに記述し、それらすべてをinclude functions.phpと呼ばれるphpファイルに含めることです。新しいページを作成するたびに、index.phpとしましょう。 php";
なぜ私はそれをする必要があるのですか?ファイルを 1 つだけインクルードするだけで、すべての関数がインクルードされるからです。問題はおそらくサーバーの負荷です。呼び出されていない関数がパフォーマンスにどの程度影響するかはわかりません。
2 番目のオプションは、必要なファイルを再度作成し、それらをチーム化して、関数が必要なときはいつでもそれを呼び出すことです。これの欠点は、分類するためにより多くの作業を行う必要があり、多くのファイルを含める必要があることです。
だから私は尋ねたいのですが、最初のオプションは、2番目のオプションに行かなければならないほどCPUとメモリの負荷を増加させますか? 最初の方法でパフォーマンスの問題がありますか、または使用されていない関数が php によってまったく解析されませんか?
mysql - MySQLストアド関数で辞書型オブジェクトを返すことは可能ですか?
MySQL ストアド関数がディクショナリ タイプのオブジェクト (キーと値のペアを保持し、拡張可能なもの) を返せるようにしたいと考えています。
現在、JSON 形式の文字列を返すことを考えています。
これを行う他の方法、できれば MySQL にネイティブな方法はありますか?
mysql - MySQLに保存された関数-動的/変数のテーブルと列の名前
今朝、MySQLでストアドプロシージャ/関数/トリガーを学習していますが、クエリで変数のテーブル名と列名を使用しようとすると問題が発生します。
これが問題の原因となっている最初の関数(getCategoryName)です。@でマークされた2つの変数をテーブル/列の名前にする必要があります。これらの2行は次のとおりです。
可能であれば、この関数をプロシージャではなく関数として保持したいのですが、それが唯一の方法である場合は、プロシージャの回答を受け入れます。
助けてくれてありがとう、
リチャード
mysql - 2番目のストアドプロシージャの値を使用してストアドプロシージャを呼び出し、単一の結果を生成しますか?
MySQLのストアドプロシージャについて自分自身を教育することにしましたが、構文が通常の踏み台(php / javascript)とはかなり異なるため、これらのプロシージャの機能についての理解が正しいかどうかを判断したいと思っていました。 、私が求めているものをどのように達成するか。
現在、次のように「people」と「posts」の2つのテーブルがあります。
それから、次のように、単純な汎用ストアドプロシージャを作成しました。
これまでのところ順調ですが、ここで私の理解が崩れます...「getPost」という2番目のプロシージャを作成します。このプロシージャは、post_idを渡すと、postsテーブルのそれぞれの行からpostデータを返します。 author_id列でgetPersonプロシージャを呼び出して、返される単一の結果が次のフィールドで構成されるようにしますpost_id, long_name, index_name, body_text, created
。
私は数時間試してエラーを出しました。ある時点で正しいアプローチをとっていたかもしれませんが(getPersonの結果に結合を使用しますか?)、私のSQL構文はシングルステートメントのMySQL呼び出しをはるかに超えて拡張されていませんPHPから。私の質問は次のとおりです。
- これは私がやりたいことへの一般的で合理的なアプローチですか、それとももっと良いものがありますか?(スクリプト言語は使いたくない)
- もしそうなら、誰かがこれを行う方法を共有できますか?
- 私はこの種の手順を使用するのが正しいですか、それとも関数は良い/良いですか?
助けてくれてありがとう!
mysql - SQL で 2,3 四分位平均を計算する
SQL (MySQL) でストアド プロシージャを記述して、2 番目と 3 番目の四分位数の平均を計算したいと考えています。
つまり、URL の読み込みにかかる時間を測定した記録があります。レコードは (id,url,time) であり、各 URL の多くの測定値です。私がやろうとしているのは、各 URL について最低および上位 25% (つまり、下位および上位四分位) を削除し、残りの 25% ~ 75% の読み込み時間の平均を計算することです。これを別のテーブルに格納します。
MS SQL の例をいくつか見ましたが、比較的簡単に思えました。しかし、MySQLを使用する必要があります:
- LIMIT 句はパーセントをサポートしていません (上位 25% を選択するアナログはありません)
- LIMIT 句はその引数が変数であることをサポートしていません (定数のみ)
- 関数は動的 SQL をサポートしていません (例: PREPARE および EXECUTE )
そして、私はここまで来ました:
PHP で書くこともできますが、SQL の方が全体的なパフォーマンスがはるかに優れていると思います。助けていただければ幸いです。
mysql - MySQLでストアド関数を適切にループするには?
非常に単純なストアド プロシージャを正しく作成するのに苦労しています。次の記事の表のスニペットを検討してください。
コピーオンライトを使用した単純な階層テーブル。記事が編集されると、現在の記事の replacement_by フィールドが新しいコピーの ID に設定されます。
baseID フィールドを追加しました。これは、将来、記事の baseID を格納する必要があります。上記の私の例では、1 つの記事 (例: id 3) があります。baseID は 1 になります。
baseID を取得するために、次のストアド プロシージャを作成しました。
以下を使用して実際に関数を呼び出すまでは、十分に単純に思えます。
私は、関数が 1 を返すことを期待しています。代わりに、マシンの CPU が 100% まで上昇します (mysqld)。
REPEAT .. UNTIL
と を使用して同じ関数を書き直してもWHILE .. DO
、同じ最終結果が得られました。
ループに入ったときに CPU が 100% 上昇する理由を誰か説明できますか?
補足: 私は単純に時間を稼ごうとしています。私はまったく同じ関数を PHP で作成しましたが、これは正常に実行されますが、MySQL の方がわずかに高速であると推測されます。約 1,800 万件のレコードをふるいにかける必要があります。少しでも節約できる時間は、それだけの価値があります。
事前に支援および/またはポインタをありがとう.
解決済みの SQL:
mysql - ストアド関数: 複数の varchar を一緒に追加するには?
mysql Stored Functions を使用して 2 つの varchar を 1 つにしようとしていますか?
php ($ var1. $ var2) または javascript の (var1 + var2) と同様
plus(p_email+p_password)では動作しないようです。
あいさつボイドコード。
mysql - ストアド関数で配列を返します
MySQL(5.x)のWHEREステートメントでストアド関数の結果を使用しようとしていますが、関数でテーブルからINT変数に値を選択し、それらを返すために失敗します。これは明らかにSELECTが複数の行を返す場合は機能しません。TABLEを返そうとしましたが(TABLEはMySQLの配列を意味することを理解していました)、それも機能しませんでした。
私が次のようなことをすることができる方法はありますか?
ありがとうございました。
mysql - MySQL 関数呼び出しでの Select ステートメントの使用
次の MySQL ストアド関数呼び出しでは、緯度経度座標を手動で入力する代わりに、テストする別のテーブルから多角形を選択したいと考えています。構文を正しくするのに問題があります。
So, I'd like to remove 43.40930419213147, -72.5537109375 43.40884544242924, -72.53695249557495 43.38754804789373, -72.5437331199646 43.378580946950244, -72.58398771286011 43.40930419213147, -72.5537109375
代わりに、次の select ステートメントを使用したいと思います。
私は、neighborhood_shapes に格納されているポリゴンを持っています。その構造は次のとおりです。
- neighbourhood_index smallint(3)
- 近所の varchar(50)
- neighbourhood_polygon(ジオメトリ)
追加情報:
IS_POINT_IN_POLYGON は次のように呼び出されます: IS_POINT_IN_POLYGON(p POINT, poly POLYGON)
助言がありますか?