1

この質問が初心者すぎる場合は申し訳ありません。

jason 配列が列に格納されていますが、配列の 1 つを読み取って並べ替えることができるかどうか疑問に思います。

たとえば、これが のデータであるcolumn Aとし{'class':'beatiful','name':'wonderful'}ます。並べたい'class' as ASC

SQL文を実装するにはどうすればよいですか? 参考になる例があれば教えてください。

または、新しい列を追加することを期待して、この種の要求を行うことができる保存されたデータの形式は何ですか?

どうもありがとうございました。

4

2 に答える 2

1

JSONは二重引用符を使用しませんか?
いくつかの文字列関数を試して抽出してください。たとえば、「クラス」の位置を見つけることができます。次に、値の開始となる次のオープニングダブルクォートを探します。次に、値の終わりになる別の値を探します。最後に、サブ文字列を取り出します。

擬似コードは次のようになります
。P1=クラスキーの位置=LOCATE('"class"'、COL_A)
P2=値のオープンクォートの位置=LOCATE('"'、COL_A、P1 + 7)
P3=クローズの位置値の引用=LOCATE('"'、COL_A、P2 + 1)
値である部分文字列= SUBSTRING(COL_A、P2、P3-P2)

それを拡張する:
SUBSTRING(COL_A、LOCATE('"'、COL_A、LOCATE('" class "'、COL_A)+ 7)、LOCATE('"'、COL_A、LOCATE('"'、COL_A、P1 + 7)+ 1)-LOCATE('"'、COL_A、LOCATE('" class "'、COL_A)+ 7))

私はそれをMySqlで実行してチェックしていませんが、あなたはその考えを理解しています。また、文字列「class」が他の値フィールド内に表示される状況を処理できるように変更することもできます。

値を抽出する式ができたら、それを並べ替えることができます。

于 2013-02-07T21:34:44.697 に答える
1

きれいではありませんが、これは基本的に JSON 文字列を分割し、クラスで並べ替えています。

select *
  , substring_index(substring_index(
      replace(substr(A, 2, char_length(A) - 2), '\':\'', '\',\'')
      , ','
      , find_in_set('\'class\'', replace(substr(A, 2, char_length(A) - 2), '\':\'', '\',\'')) + 1
    ), ',', -1) as SortItem
from MyTable
order by SortItem;

ここにデモ SqlFiddleがあります。

JSON の引用符またはアポストロフィに従って、区切り文字を変更する必要がある場合があります。

また、コメントが指摘しているように、リレーショナルデータベースを非リレーショナルな方法で使用しているため、これは醜いです。

于 2013-02-07T21:54:09.720 に答える