2016-05-10 6 views
1

ich einen Tisch haben,Looping über einen Tisch und Parsen von Daten einer Spalte

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 

wo im Detail Spalte bedeutet 5||0.49995 ist ein productid und 0.4999 ist das Geld Produkt hat, was ich brauche zu bekommen ist die Werte aus den Details Abschnitt und stellen Sie es in der Tabelle, Es muss über alle incassoid Schleife, und für jede incassoid, brauche ich die Details wie folgt, als Beispiel für incassoid1, sollte es Details wie diese zeigen,

incassoid Productid productamount amount 
========= ========= ============ ========= 
    1   5   0.4999   1 
    1   7   0.0001   1 
    1   9   0.0500   1 

Ich versuche einen Weg zu finden, den Detailbereich zu analysieren, aber ich bin mir nicht sicher, wie ich das machen soll, kann jemand bitte mir dabei helfen.

Danke !!!

+0

Ich denke, Sie schon bemerkt haben, aber nie Speichern von Daten ähnlich. Haben Sie separate Spalten für die verschiedenen Details. – jarlh

+0

Mögliches Duplikat von [SQL Split-Werte zu mehreren Zeilen] (http://stackoverflow.com/questions/17942508/sql-split-values-to-multiple-rows) – mitkosoft

+0

Auch wenn Sie das irgendwie tun, wird dies nie gehen effizient genug sein, um es in Produktion zu bringen. Sie sollten eine separate Tabelle für Details haben, die genauso aussehen sollte wie das Ergebnis, das Sie erwarten. –

Antwort

2

Ich nehme an, Sie haben eine Tabelle von Produkten

Tabelle Produkte

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

können Sie diese Anforderung verwenden, um zu tun, was Sie

wollen
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, '||%')))) 

Die subrequest in der FIND_IN_SET eine Liste extrahieren von Produkt-IDs aus Details. Anschließend wird für jede Details (von Tabellenname) der Filter find_in_set verwendet, um die korrekte Produktliste zu verknüpfen.

Danach müssen wir nur die Menge des Produkts im Detail extrahieren.

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

+0

Vielen Dank !!!!!! Genau das, was ich wollte, Arbeitete wie ein Charme ...... :) – Nia

+1

Mein Vergnügen! :) – ebahi