2017-01-04 9 views
0

私はDBに配列JSONストリングでパーミッションを保存しています。この時点で私はこのようにそれらを選択しています:regexp(json string)で特定の値を使用してmysqlからローを取得

1 | Dog | [3,4] 
    2 | Cat | [33,4] 
    3 | Tiger | [5,33,4] 
    4 | wolf | [3,5] 


SELECT * FROM `pages` WHERE access REGEXP '([^"])3([^"])' 

それが動作するはずのように、それは動作しますが、ありません。このクエリは私に3を含むすべてのレコードを与えますが、それは33を含んでいます。私の質問はどのようにjsonの文字列に特定の値で行を取得するために私の正規表現をフォーマットする必要があります。

psの私が持っているmysqlの5.5ので、私はあなただけのフィールドに数字を持っている場合のみ、文字列は、あなたが探している値を取るために、あなたは正規表現を変更することができ

+0

[mysqlのjsonエンコード配列に値が存在するかどうかをチェックする](http://stackoverflow.com/questions/41132714/check-if-a-value-exists-in-json-encode-array- – e4c5

+0

@ e4c5私は5.5のmysqlバージョン – Dest

+0

を持っていますが、oyuがmysql 5.5上にある場合はJSONを使用してはいけないと言うように、この問題は多種多様です。このデザインをアップグレードするか、削除してください。 'データベースの正規化'を読む – e4c5

答えて

1

がサポートされていません。このバージョンのJSON関数に知っているように

SELECT * FROM `pages` WHERE access REGEXP '([^"0-9])3([^"0-9])'  
+0

はい、それはすばらしい答えに感謝します。 – Dest

0
REGEXP '[[:<:]]3[[:>:]]' 

「単語の境界」鮫を使用し、次のとおりです。(ここでは「3」)はそれにすぐ近くに別の番号を持っていません。

関連する問題