6

サブクエリを渡して、そのサブクエリの JSON 表現を出力できる関数を MySQL で作成するというアイデアがありました。

私は非常に多くのデータを MySQL から頻繁に取得し、それを API 出力用に JSON に変換しています。JSONを返すだけのSQLサーバーでこれを行うMySQL関数を書くと、おそらく速度が向上するでしょうか?

私の想像力:

query('SELECT * FROM people');

// Output:
// +----+--------+-----+
// | id | name   | Age |
// +----+--------+-----+
// |  1 | Molly  | 24  |
// |  2 | Edward | 28  |
// +----+--------+-----+

query('JSON(SELECT * FROM people)');

// Output:
// [{"id":1,"name":"Molly","Age":24},{"id":2,"name":"Edward","Age":28}]

可能?はいの場合、開始方法の手がかりはありますか?

4

4 に答える 4

2

ユーザー名と電子メールを含むテーブルについて考えてみましょう。MySQlユーザー定義関数で次のようにJSONを構築できます。

SELECT 
     CONCAT("[",
          GROUP_CONCAT(
               CONCAT("{username:'",username,"'"),
               CONCAT(",email:'",email),"'}")
          )
     ,"]") 
AS json FROM users;

JSONを返すMySQLクエリ。

[
     {username:'mike',email:'mike@mikesplace.com'},
     {username:'jane',email:'jane@bigcompany.com'},
     {username:'stan',email:'stan@stanford.com'}
]

結果をJSON形式に変換する組み込みのメソッドはないため、UDFで自分で行う必要があります。

于 2012-06-04T11:37:50.340 に答える
2

まず、StackOverflowのこのスレッド(SQL Server) を見てください。

また、PL/JSONについてはこちら、sql2json (PHP)についてはこちらをご覧ください。

于 2012-06-04T11:32:23.587 に答える
2

MySQL 5.7 以降JSON_ARRAY、 およびJSON_MERGE他の関数を使用して JSON を出力できます。

次のように機能します。

RETURN JSON_ARRAY('id':1,'name':'Molly','Age':24);

複数のドキュメントを持つこともできます。

RETURN JSON_MERGE('{"id":1,"name":"Molly","Age":24}', '{"id":2,"name":"Edward","Age":28}');
于 2016-11-14T14:58:21.120 に答える
0

JSON を生成するために SQL を書く意味がわかりません。それは単に面倒で醜いだけであり、汎用関数に一般化するのは非常に困難です。また、それは実際には SQL が設計された目的ではありません。SQL は、必要なレコードを管理、保存、取得し、結果セットに対して計算を実行するように設計されています。非常に高速でオンザフライです。JSON が必要な場合は、とにかくサーバー側のスクリプトに行を吐き出す必要があるため、スクリプト言語を使用して JSON を作成することもできます。それがスクリプト言語の目的です。

于 2012-06-04T13:46:10.957 に答える