問題タブ [mysql-udf]
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 - XML を返す MYSQL UDF 関数
状況:
文字列とセットを返す式を受け取る、XMLify という名前の mysql 関数を作成したいと考えています。
XMLify(string, expr)
この関数は、セット内の返された各行の返された各フィールドを独自の XML タグにラップする必要があります。タグの名前はフィールド名にする必要があります。
小さな例:
返す必要があります:
冗長なデータをクライアントに返さなくても、多くの結合や依存サブクエリを含む複雑なクエリを実行できるため、これが必要です。
構築したい関数がない場合、既に回避策があります。ただし、これには、保守が容易ではない難しいクエリを作成することが含まれます。以下の私の例を参照してください。
フィールド名が正しい XML ノード名であることを確認することは、後で心配する必要があります。関数が成立したら、フィールド名を取得してそれを有効な XML ノード名に変換するアルゴリズムを考えます。
また、XML データのエスケープは、後で心配する必要があります。これは、 という名前の別の関数で行われます。この関数は、すべてのデータをおよびにCDATAify
単純にラップし、データ内の以前の の出現を にエスケープします。<![CDATA[
]]>
]]>
]]]]><![CDATA[>
これらは結果セットを取り込まないため、MySQL のストアド関数を使用してこれを達成することはできませんでした。また、SQL を文字列として渡してステートメントを準備して実行したとしても、フィールド名を知らなければアクセスできません。
そのため、ユーザー定義関数 (UDF) を使用してトリックを実行できるかどうか疑問に思っています。これは私がまだ取り組んでいないことであり、下船する前にここでアドバイスをお願いします.
質問:
だから私の質問は今です:
- 要約すると、式または結果セットを渡すことができ、結果セットのフィールド名も使用できる MySQL 関数が必要です。
- これはストアドファンクションでは不可能だと思いますか?
- UDF は式/その結果セットを引数として取りますか?
- UDF では結果セットのフィールド名にアクセスできるので、それらを XML タグ名として使用できますか?
- Windowsでも動作しますか?UDFにはいくつかの制限があることを読みました
- 私がまだ考えていないより良い方法はありますか?
- 自分の開発用コンピューターで作成した UDF .dll を取得し、その .dll ファイルをサーバーにコピーしてそこで使用することはできますか?
- どうすればこの番組を一挙に手に入れることができますか? Windows コンピュータに MySQL 5.5 64 ビットがあることを十分に考慮してください。
例:
次の 3 つのテーブルがあるとします。
私の望む結果は、Bart と Lisa に限定されます。
考慮:
- PHP や C# で最初にユーザー テーブルをクエリしてから、ユーザーごとに学年とおもちゃに対して 2 つの追加クエリを実行する必要はありません。1000 ユーザーの場合、2001 クエリを実行することになるからです。
- また、すべての結合を使用してクエリを実行し、PHP または C# で結果セットを調べたくありません。これは、ユーザー名が成績の数におもちゃの数を掛けた回数だけ送信されるためです。巨大なブロブを含むユーザー フィールドがあることを想像してみてください。
- グレード/おもちゃがまだ二重に表示されるため、結合されたテーブルで GROUP_CONCAT を単純に使用することはできません。
- また、DISTINCT で GROUP_CONCAT を使用すると、Bart の 2 つの E のように、同一の成績が失われます。
したがって、現在、次のステートメントを使用して、2 つの依存サブクエリを含むこの結果を取得します。これはうまくいきます:
お気づきかもしれませんが、これはかなり大きく醜いクエリであり、読むときに目を痛めます。このようなクエリを維持するのは困難です。関数 XMLify と CDATAify を使用する場合は、代わりに次のように記述できます。
編集:
NB のコメントで述べたように、Githubにリポジトリがあり、必要なものがすべて含まれている可能性があります。しかし、これを自分のシステムで機能させるために数日を費やしましたが、成功しませんでした。Windows で実行されている MySQL 5.5 64 ビット サーバーにこれをインストールする方法について、段階的なハウツーを保持している回答も受け入れられます。
makeやmakefileなどの経験がないので、丁寧に説明してください。
php - PHP スクリプトを外部から起動する MYSQL トリガー
現在、mysql トリガーを使用して php スクリプトを起動しようとしています。スクリプトを起動すると、特定の Web サイトからデータを取得し、別のテーブルに配置します。スクリプトをテストしましたが、現在、php5 を使用して実行すると動作します。また、lib_mysqludf_sys を適切にインストールし、適切なフォルダーを mysql のプラグイン フォルダーに移動しました。トリガーを作成したとき、エラーは発生しませんでした。それは私のphpスクリプトを実行しません。どこが間違っていて、どうすれば修正できますか?
mysql - MySQL UDF ライブラリのインストール
MySql UDF Lib をインストールして使用しようとしていますが、インストール手順で ELF エラーに直面しています。
私はUbuntu 14.04LTS 64の下にいます。
他のいくつかの回答に従って-m64
、コンパイラのフラグを追加しようとしましたが、まだエラーが発生しています。
免責事項: 私は Linux の専門家ではありません。プログラムの問題の解決策を試しているだけです。
私のmysqlfile
コマンド:
そして私のlibfile
コマンド:
そして私のmysqldfile
コマンド:
mysql - mysql udf から返された配列から要素を取得する方法
変数を char** 型で返す mysql UDF を作成しました。これを行った理由は、2 つの char 配列を同時に mysql に返す必要があるためです。しかし、この UDF を呼び出す mysql トリガーを作成するときに、この配列から要素を取得する方法がわかりません。
ここに私のUDFコードがあります:
そして、トリガーを作成したときにこの配列から要素を取得する必要があるときに行き詰まりました。以下は私の擬似コードです。正しい方法で実装する方法を誰かが知っているとありがたいです:
mysql - MySQL が自分の関数と同じ名前の関数を追加するとどうなりますか?
私は php (7.2) で sha3 ハッシュを使用しており、MySQL でも引き続き使用する予定でしたが、MySQL はまだそれらをサポートしていません。
独自の UDF を作成してそれを呼び出した場合、たとえば、 のようにしますsha3
が、将来の MySQL バージョンでネイティブsha3
関数が追加された場合、どうなりますか?
競合の可能性を避けるために、とにかく別の名前を付けることにしますが、これは最終的にどの関数でも発生する可能性があるため、確かに興味があります。
MySQL での sha3 サポートを探している人がいる場合に備えて、ネイティブの sha2 関数とまったく同じように機能することを目的とした rhash を使用して、まさにそれを行う MySQL UDF を作成しました。ここからダウンロードできます (インストールと使用方法の説明はコメントにあります)。https://gist.github.com/BrianLeishman/a0f40e7a0a87a7069c5c56a768ff3179
また、sha3 は sha2 よりも高速であるはずですが (私が思うに)、私の関数はネイティブ sha2 の 4 倍遅い (100,000 ハッシュを生成する場合) ことは注目に値しますが、将来のネイティブ sha3 がその問題を解決することを願っています。
と呼ばれる 16 進エンコーディングなしでハッシュを返すための別の UDF を追加しましたunhex_sha3
。これは文字通り として機能する必要があります。16 進エンコーディングとその逆の間の無意味な変換を回避できるため、unhex(sha3(...
このバージョンはほぼ正確にネイティブ速度です ( と比較して)。sha2
https://gist.github.com/BrianLeishman/d7903a4acba75707c05fc581e1c714c3