JSON列の値によるMySQLクエリ順序 -- php フィールド と mysql フィールド と sql フィールド と json フィールド 関連 問題

MySQL Query Order By Value in JSON Column












4
vote

問題

日本語

マイテーブル内のフィールド内の平均<コード> CREATE TABLE IF NOT EXISTS DB ( INN VARCHAR(200) NOT NULL, Time BIGINT not NULL ); 5 に基づいてクエリを並べ替える方法は、次のように構成されているJSONテキストです。

<事前> <コード> <NA>16

3 <コード> CREATE TABLE IF NOT EXISTS DB ( INN VARCHAR(200) NOT NULL, Time BIGINT not NULL ); 7 Sの平均でソートする必要があります。これには常に3つだけの値があります。

現在のクエリは次のとおりです。

<事前> <コード> CREATE TABLE IF NOT EXISTS DB ( INN VARCHAR(200) NOT NULL, Time BIGINT not NULL ); 8

現在の結果:

<事前> <コード> CREATE TABLE IF NOT EXISTS DB ( INN VARCHAR(200) NOT NULL, Time BIGINT not NULL ); 9
英語

How can I sort a query based on the average Rating in a field in my table, the field itself is JSON text, structured like:

[  {"Type":1,"Rating":5},  {"Type":2,"Rating":5},  {"Type":3,"Rating":5} ] 

I need my query to be sorted by the average of the 3 Ratings. There will always ever be only 3 values for this.

My current query is:

SELECT `Name`, `Town`, `Vehicle`, `Review`, `Rating`, `Pics`, `PostedOn`  FROM `tbl_ShopReviews` WHERE `Approved` = 1 ORDER BY `PostedOn` DESC 

Current results:

Name    Town    Vehicle Review  Rating  Pics    PostedOn Kevin   Chicopee    94 Corolla  Great stuff, very glad I brought it here    [{"Type":1,"Rating":5},{"Type":2,"Rating":5},{"Type":3,"Rating":5}]     N 
</div
           
         
         

回答リスト

-1
 
vote
vote
ベストアンサー
 

より良い解決策は、挿入前にデータを解析することであり、3列または1正規化列であなたの準備ができていることです。 あなたが変わっていない状況を扱っていて、常に3つの評価を扱うならば、あなたはこれを試すことができます

<事前> <コード> lat1,lng12

この解決策はそれらすべての最も保守的で柔軟性があり、非常にバグが発生しやすいと考えてください。実際の解決策はあなたのデータを再構築しています。

 

The better solution is to parse the data before the insert, and have it ready for you in 3 columns or in 1 normalized column. Saying that, if you're dealing with a non-changeable situation, and have exactly 3 ratings always, you can try this

ORDER BY (substring(json, 21, 1)+ substring(json, 43, 1)+ substring(json,65, 1))/3 desc; 

Please consider that this solution is the least maintainable and flexible of them all, and very bug prone. The real solution is restructuring your data.

</div
 
 
 
 
16
 
vote

私のような人のためだけに、 point313 の解決策を見つけようとします。 lat1,lng14 演算子を使用してJSONを抽出して、 JSON_EXTRACT 関数または lat1,lng15 構文。

<事前> <コード> point316

2013年後半(笑)に非常に役立つように見えます。

 

Just for those like me, who googles and tries to find solution for laravel 5.4. You can use -> operator to extract JSON, that is equal to json_extract function or to column->"$.key" syntax.

$users->orderBy('column->key', 'desc'); 

Looks like it would be very useful in late 2013 (smile).

</div
 
 
     
     
2
 
vote

lat1,lng17 の値は

のような値を持ちます。

<コード> lat1,lng18

JSONフィールドを取得する場合は、

で順にJSONフィールド<コード> lat1,lng19 ベースの値を使用します。 <事前> <コード> point20

あなたの値が日付形式の場合

のようなこのコードを変更するだけです

<コード> point21

 

For example field_name has the value like

{"json_field_key1":"2016/11/24","json_field_key2":"value"}

Use this code for get the json field json_field_key1 based value in ORDER BY case

select table.*, SUBSTRING_INDEX(SUBSTRING_INDEX(field_name,'json_field_key1":"',-1),'"',1) as json_field_name from table ORDER BY SUBSTRING_INDEX(SUBSTRING_INDEX(field_name,'json_field_key1":"',-1),'"',1) DESC 

If your value is in date format just modify this code like

order by DATE(SUBSTRING_INDEX(SUBSTRING_INDEX(field_name,'json_field_key1":"',-1),'"',1)) DESC

</div
 
 
1
 
vote

MySQL 5.7ヘルプからこの機能は? http://blog.ulf- Wendel.de/2013/mysql-5-7-sql-functions-for-json-jun-

 

Would this feature from MySQL 5.7 help? http://blog.ulf-wendel.de/2013/mysql-5-7-sql-functions-for-json-udf/

</div
 
 
0
 
vote

私の意見では、最良の解決策は、そのレビューテーブルのためにあなたのアプリケーション内のイベントをフックアップして挿入することができることです。

この情報が必要なクエリは、処理がはるかに簡単になり、パフォーマンスが向上します。

 

In my opinion the best solution is to be able to hook up update and insert events in your application for that reviews table and calculate the average in to another field.

Then those queries that need this info will be much easier to handle and will have a better performance.

</div
 
 
-1
 
vote

これをやる方法はありません、実際、私はそれが可能でさえあることさえありません。

言われていると、データベース構造には実際にJSONを含まないべきではありません。代わりにデータベースにタイプフィールドを追加しないのですか?

 

There isn't an easy way to do this, in fact, I'm not even sure it's possible.

That being said, your database structure really shouldn't contain JSON if it's something you need access to in this respect, instead, why not add a Type field to your database?

</div
 
 
     
     
-1
 
vote

評価フィールドは、ユーザーがキーの列としてユーザー、TypeとVlaueを含むテーブルであり得る。その後、キーが一致してからその後ソートされている値列のMySQL avg()を使用するだけです。

この助けを願っています

 

the Rating field could be a table with user, type and vlaue as columns where the user is the key. Then you can just use mysql AVG() on the value column where the key match and then sort to that.

hope this help

</div
 
 

関連する質問

44  文字列が有効なJSONかどうかを判断する方法  ( How to determine whether a string is valid json ) 
PHPのための堅牢な(そして弾丸の証明)is_json関数スニペットを知っていますか?私(明らかに)文字列がJSONかどうかを知る必要がある状況を持っています。 HMM、おそらく jsonlint リクエスト/応答を通してそれを実行しますが、それは少しov...

0  JSONオブジェクトを使用したオートコンプリート  ( Autocomplete using json object ) 
私の製品のリストをJSONオブジェクトに変換し、今度は自動完全な機能を持つJSONオブジェクトを使用したいのですが....私は自動補完のためにJSONオブジェクトだけを使用したいです。 。 ...

1  SQL Server CLRストアドプロシージャJSONパラメータ  ( Sql server clr stored procedure json parameter ) 
私は、いくつかの動的SQLを生成するためのストアドプロシージャに大量のデータを渡したいシナリオに出会いました。 渡したいデータは、私のASP.NET MVC Webプロジェクトで使用するこのJSON / C#クラスオブジェクトに格納されています。 <事前> <...

32  Pythonの直列化可能オブジェクトJSON  ( Python serializable objects json ) 
<事前> <コード> class gpagelet: """ Holds 1) the pagelet xpath, which is a string 2) the list of pagelet shingles...

4  jQuery Ajaxを使用して文字列を返すだけですか?  ( Can you only return a string using jquery ajax ) 
これについて考えています。 JSON_ENCODE()を使用できることを認識しています。 jQuery Ajax呼び出しを介してエンコードされた配列または多次元配列を送信するには、JSONアレイを解釈します。 しかし私は、ECHOを使用して単なる文字列を送るた...

0  動的に作成されたコンテンツ上でjQuery show /非表示の実行  ( Performing jquery show hide on dynamically created content ) 
jQueryで作成したページを持っていて、このページではテーブル行が特定の色としてそれらを識別するクラス名(すなわちTR Class = "YellowClass")があるテーブルです。 ユーザーは、特定の色のテーブルを表示/非表示にするチェックボックスを...

0  JSONエンコーダPython Recursiveリファレンス  ( Json encoder python recursive reference ) 
ここで正しいことをしているかどうかはわかりません。基本的に私のクラスの両方がJSON-Serializableになることを望みます。 <事前> <コード> import json class gpagelet(json.JSONEncoder): "...

1  JSONとPHPの設定  ( Json and php settings ) 
JavaScriptからJSONエンコードされた文字列をAJAXを介してサーバー上のPHPファイルに渡しています。私のオンラインサーバーでは、これは大丈夫です。しかしローカルではありません。 PHPには2箇所にインストールされている違いがあります。マイナー...

4  c#JSONデータを配列に取得する方法  ( C sharp how to retrieve json data into an array ) 
私はJSONデータを解析できるさまざまなライブラリを見つけましたが、データをC#配列またはリストに入れる方法に関する文書は見つかりませんでした。 このJSONデータを手に入れました: {"001":{"名前": "John"、 "Phone":["MOB ...

1  整数のiPhoneでJSONデータを作成します  ( Create json data on iphone with integers bools ) 
iPhone用のJSONフレームワーク(<a href="http://code.google.com/p/json-framework/" REL=">> http://code.google.com/ P / JSON-Framework / )NSDi...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有