2016-03-30 17 views
4

現在、カテゴリIDを格納するカラムを含むMySQLテーブルがあります。これらのIDはJSON文字列に格納されます。これらのJSON文字列に特定のIDを照会する最も効率的な方法を探しています。例えば特定の値のJSON文字列でMySQLカラムを検索

表:ポスト

フィールド:ここネコ

ネコ列のJSON文字列のいくつかの例示的な値であります:


[111、123、456]

[123、345、999]

[555、777、888]

のは、私が含まれているすべての行を照会したいとしましょうJSON文字列内のid: "123" LIKEの比較を使用してこれを達成できることはわかっていますが、JSON文字列をクエリするより効率的な方法があると確信しています。他のアイデアは大変ありがとうございます。

ありがとうございます!

+0

を検索このタイプのを行うには、効率的な方法はありません。だからあなたのデータをこのように格納するのは信じられないほど悪い考えです。 – Barmar

答えて

2

JSON文字列内の特定の値を本当に照会する必要がある場合は、個々の値をデータベースに格納してみることをお勧めします。上の例では、postsテーブルに結合するフィールドテーブルを作成するだけです。次に、簡単なjoinステートメントですべての適切な値が得られます。

2

あり保存するJSON値(Storing Data in MySQL as JSON)の強力な議論があるが、あなたは、このためにネイティブMySQL関数を使用することができます。

MySQLの公式ドキュメント:検索

機能でhttps://dev.mysql.com/doc/refman/5.7/en/json-functions.html

JSON値

あります:

mysql> SET @j = '{"a": 1, "b": 2, "c": {"d": 4}}'; 
mysql> SET @j2 = '1'; 
mysql> SELECT JSON_CONTAINS(@j, @j2, '$.a'); 

かとREGEX何かのように:

SELECT * FROM posts where cats REGEXP '"id":"[[:<:]]123[[:>:]]"'; 

かと:ここ

extract_json_value( json_text TEXT文字セットUTF8 のXPath TEXT文字セットUTF8 が)RETURNS TEXT文字セットUTF8

mysqlでJSONを処理する良い投稿:http://rpbouman.blogspot.com.es/2015/11/mysql-few-observations-on-json-type.html

希望すると助かります!

4

猫なければなりません含まれています:{"ids": [2,4,6,7]}

WHERE JSON_CONTAINS(posts.cats->"$.ids", '[2]');

関連する問題