1

我有一张包含这些值的表格

表:文件

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 

SQL 小提琴模式

我需要这样的结果。其中 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。

4

3 回答 3

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 <> ''
于 2013-01-06T17:30:11.263 回答
2

使用存储过程可以解决您的问题。是您已经解决的问题的完全相同的副本

于 2013-01-06T17:31:18.047 回答
0

恐怕没有简单的方法来创建 SQL 查询,也没有可用的拆分功能。

您可以做的是创建自己的函数,如此处所述

您也可以直接在 php 代码中处理结果。

于 2013-01-06T17:14:42.077 回答