1

これは難しいです。特定の行で結合する必要がある2つのテーブルがあり、最初のテーブル行がjson値であるという問題があります

これは、テーブル項目の json 行です

[{"id":"15","value":"News Title"},{"id":"47","value":"image1.jpg"},{"id":"33","value":"$30"}]

これは、json ID で結合し、 Title 、 Image 、 Price などの実際の属性名を取得する必要があるテーブル属性です。

id      Name
15      Title
47      Image
33      Price

だからスタートは

SELECT item_values FROM ujm_items 
LEFT JOIN?????
 WHERE category = 8 AND published = 1 ORDER BY created DESC

しかし、 json に参加したままで、手がかりがありません。どんな助けでも大歓迎です。

4

1 に答える 1

2

...これが、構造化データを単一の SQL フィールドに格納しない理由です。それは、リレーショナル データベースの目的全体を無効にします。

JSON パーサーを含む DB を持っていない限り、次の 2 つのオプションがあります。

a) 特定のキーと値のペアを検索/抽出する信頼性の低い文字列操作

b)jsonをネイティブに解析できるクライアントに丸呑みし、必要なキー/値を抽出してから、実際の結合に他のIDフィールドを使用します。

SELECT ...
LEFT JOIN ON SUBSTR(jsonfield, POSITION('"id:"', jsonfield)) etc...

いずれにせよ、これらの計算/派生値に対してインデックスを使用できないため、パフォーマンスが完全に低下します。

これはそのままでは機能しないことに注意してください。これは、これがどれほど醜いものになるかを示すためです。

テーブルを修正する - 設計を正規化し、データを抽出する必要がある JSON データを保存しないでください。完全にフェッチ/更新するだけのjson文字列に入れることは1つのことです。そのサブ値に参加する必要があるものを持つことは、まったく別のことです。

于 2012-08-18T20:50:53.850 に答える