我有一张桌子,
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
表示5
是productid
,0.4999
是货币产品,我需要的是从详细信息部分获取值并且在表格中表示它,它需要遍历所有incassoid
,并且对于每个incassoid
,我需要这样的详细信息,作为incassoid
1
的示例,它应该显示这样的细节,
incassoid Productid productamount amount
========= ========= ============ =========
1 5 0.4999 1
1 7 0.0001 1
1 9 0.0500 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