2016-05-10 19 views
1

のデータを解析し、は、テーブルの上にループと私はテーブルを持って列

incassoid Amount  Details 
========= ====== =============== 
    1  1.0000 5||0.4999;7||0.0001;9||0.0500 
    2  2.0000 3||1.0000;15||1.0000 
    3  1.0000 8||1.0000 

詳細欄で、5||0.49995productid0.4999であることを意味することは、お金の製品は、私が必要なもの、持っている得ることです詳細セクションの値を表に表します。incassoidのすべてをループする必要があります。incassoid1の例では、

のような詳細を表示する必要があります。 incassoidについては、このような詳細が必要です。
incassoid Productid productamount amount 
========= ========= ============ ========= 
    1   5   0.4999   1 
    1   7   0.0001   1 
    1   9   0.0500   1 

詳細セクションを解析する方法を見つけようとしていますが、どうすればよいのか分かりません。この中で私を助けてください。

ありがとうございました!

+0

私はあなたがすでに気づいていると思いますが、そのようなデータを保存することはありません。異なる詳細については、別々の列があります。 – jarlh

+0

[SQL分割値を複数行にする]可能な複製(http://stackoverflow.com/questions/17942508/sql-split-values-to-multiple-rows) – mitkosoft

+0

何とかしても、これは決してできませんそれを生産に投入するのに十分効率的である。期待する結果とまったく同じように見えるようにするためには、別のテーブルを用意する必要があります。 –

答えて

2

私はあなたがFIND_IN_SETでサブリクエストは、リストを抽出あなたは

select t.incassoid, p.id productid, 
     substring_index(substring_index(t.details, concat(p.id, '||'), -1), ';', 1) productamount, 
     t.amount 
from products p, tablename t 
where find_in_set(p.id, (select group_concat(p2.id) 
         from products p2, tablename t2 
         where t2.incassoid = t.incassoid 
          and (t2.details like concat(p2.id, '||%') 
           or t2.details like concat('%;', p2.id, '||%')))) 

やりたいという要求を使用できる製品

表製品

id 
------ 
    3 
    5 
    7 
    8 
    9 
    15 

のテーブルがあるとし製品IDの詳細 次に、(tablenameの)各詳細について、find_in_setフィルタを使用して、正しい製品リストを結合します。

その後、製品の量を詳細に抽出するだけで済みます。

SQLFiddle:http://sqlfiddle.com/#!9/7dfd4/1/0

+0

本当にありがとう!!!!!!まさに私が望んでいた、チャームのように働いて...... ...... – Nia

+1

私の喜び! :) – ebahi

関連する問題