首页 > 解决方案 > 从单列中选择数据作为多条记录

问题描述

我在 mysql 数据库中有以下表结构。

id |     files          | status
 1    a.pdf,b.pdf,c.pdx   1   
 2    d.pdf,e.pdf.g.pdf   2    
 3    x.pdf,k.pdf,y.pdf   1

如您所见,附件都存储在一行中。我的查询应该选择 status = 1 的所有行,所以我期望数据采用以下格式。

1    1   a.pdf     1   
2    1   b.pdf     1   
3    1   c.pdf     1   
4    3   x.pdf     1    
5    3   k.pdf     1   
6    3   y.pdf     1

不幸的是,我不确定我可以使用哪个运算符来完成此操作。我知道 SQL 有支点,但我怀疑即使这样也能解决我的问题。

因此,如果我能在选择查询的条件下获得任何帮助,我将不胜感激。

问候

标签: mysql

解决方案


尝试这个:

SET @row_num = 0;
SELECT
    (@row_num := @row_num + 1) ROW_NUM,
    id,
    SUBSTRING_INDEX(SUBSTRING_INDEX(files, ',', idx), ',', -1) FileName,
    status
FROM
    test
JOIN 
    (SELECT 1 idx UNION ALL SELECT 2 idx UNION ALL SELECT 3 idx UNION ALL SELECT 4 idx UNION ALL SELECT 5 idx) idxs
    on idxs.idx - 2 < LENGTH(files) - LENGTH(REPLACE(files, ",", ""))
WHERE status = 1
;

只需添加与字符串中文件的最大数量一样多的索引。

请注意,最后一个文件名不应有逗号。这是魔术-2负责的。


推荐阅读