循环遍历表并解析列的数据

时间:2016-05-10 07:22:30

标签: mysql sql

我有一张桌子,

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.4999表示5productid0.4999是货币产品,我需要的是从详细信息部分获取值并且在表格中表示它,它需要遍历所有incassoid,并且对于每个incassoid,我需要这样的详细信息,作为incassoid 1的示例,它应该显示这样的细节,

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

我正试图找到一种方法来解析详细信息部分,但我不知道该怎么做呢,有人可以帮我解决这个问题。

感谢!!!

1 个答案:

答案 0 :(得分:2)

我想你有一张产品表

表产品

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

您可以使用该请求执行您想要的操作

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

find_in_set中的子请求从详细信息中提取产品ID列表。 然后,对于每个细节(tablename),find_in_set过滤器用于加入正确的产品列表。

之后我们只需要详细提取产品数量。

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