2017-11-20 6 views
0

JSON文字列がデータベースに格納されているため、JSON文字列のWHERE条件に基づいてSQL COUNTを設定する必要があります。私はそれがMYSQL 5.5で動作する必要があります。MYSQL REGEXP with JSON array

唯一の解決策は、SQLクエリでREGEXP関数を使用することです。私が見て

SELECT COUNT(..) WHERE custom_data REGEXP '[HELP_HERE]' 

条件:私は今、SQL文を作成する必要が

{"language_display":["1","2","3"],"quantity":1500,"meta_display:":["1","2","3"]} 

https://regex101.com/r/G8gfzj/1

:ここ

custom_data列に格納されている私のJSON文字列でありますforはのlanguage_displayが1、2、または3のいずれかでなければならないということですまたはSQL文を作成するときに定義する値です。

は、これまでのところ私はREGEX式でここに来たが、それは動作しません:1は私が求めている値に置き換えられ

(?:\"language_display\":\[(?:"1")\]) 

。私は一般的に "1"(引用符付き)も見ることができますが、meta_display配列にも異なる値があります。

REGEXでうまくいかない!助言がありますか?

+0

'language_display'の配列に1,2,3が含まれているかどうかチェックしたいですか? – Sweeper

+0

はい。しかし、1、2、3だけでなく、配列にも含まれる他の整数。 – dmagnif

答えて

0

私はあなたのテスト文字列

\"language_display\":\[(:?\"[0-9]\"\,)*?\"3\"(:?\,\"[0-9]\")*?\] 

https://regex101.com/に試合を取得するには、次の正規表現を使用し、偉大な動作しているようですが、無料のオンライン正規表現テスターです。小さいものから始め、大きな仕事をしてください。

申し訳ありませんがあなたのために働いていません。それは非貪欲な "*?おそらく '?'

言語の表示フィールドをシリアライズして、このデータをシリアル化する方法を見てみましょう。 How to store a list in a column of a database table

あなたの考えを働かせても、それはfvckほど遅くなります。各行を一度処理して、SQLを使用してより簡単に検索できるようにしてください。カンマで区切られたリストを含むフィールドでさえ良いでしょう。

+0

pcreで動作するようですが、pcre構文が完全にサポートされていないため、SQLのREGEXPでは動作しません。私が得るエラーは次のとおりです。regexpから 'repetition-operator operand invalid'エラーが発生しました。回避策はありますか? – dmagnif