我有一张包含这些值的表
表:文件
id | document
----|-------------
1 | doc.txt , doc1.txt , doc2.rtf , doc3.docx , doc4.doc
2 | doc.txt
3 | doc.txt , doc1.txt
4 | doc.txt , doc1.txt , doc2.rtf
5 | doc.txt , doc1.txt , doc2.rtf , doc3.docx , doc4.doc
6 | doc.txt , doc1.txt , doc2.rtf , doc3.docx
7 | doc.txt , doc1.txt , doc2.rtf , doc3.docx , doc4.doc
8 | doc.txt , doc1.txt , doc2.rtf
9 | doc.txt , doc1.txt , doc2.rtf , doc3.docx , doc4.doc
10 | doc.txt , doc1.txt
我需要这样的结果。其中id = 5
Counter | docs
----|-----------
1 | doc.txt
2 | doc1.txt
3 | doc2.rtf
4 | doc3.docx
5 | doc4.doc
id = 4
Counter | docs
----|-----------
1 | doc.txt
2 | doc1.txt
3 | doc2.rtf
你看我需要爆炸逗号分隔列并计算有多少值。我不喜欢这个架构,但我正在研究一个现有的项目,不能改变它。我需要在用户界面中显示计数器。所以反制也是必要的。我怎样才能做到这一点?另外我不能在php结束,因为我使用pyrocms,我需要使用pyrocms tage显示它,这不允许我在视图中使用PHP。
答案 0 :(得分:2)
看看这个SQL FIDDLE,也许就是你想要的。您必须使用帮助程序表sequence
SELECT * FROM
(SELECT S.Id Counter,
REPLACE(SUBSTRING(SUBSTRING_INDEX(document, ' , ', S.Id),
LENGTH(SUBSTRING_INDEX(document, ' , ', S.Id - 1)) + 1),
' , ', '') docs
FROM documents D, sequence S
WHERE D.id = 3) A
WHERE A.docs <> ''
答案 1 :(得分:2)
使用存储过程可以解决您的问题。 here's您的问题的确切重复已经已解决
答案 2 :(得分:0)