php - 如何使用 MySQL 将一条记录的值分解为多行?

标签 php mysql implode

我有一个这样的表:

// mytable
+----+--------+-------------------+
| id |  word  |      numbers      |
+----+--------+-------------------+
| 1  | hello  | 1<br>2<br>3<br>   |
| 2  | how    | 12<br>15<br>      |
| 3  | are    | 453<br>1<br>      |
| 4  | you    | 3<br>33<br>453<br>|
+----+--------+-------------------+

我想要这个输出:

// mynewtable
+----+--------+---------+
| id |  word  | numbers |
+----+--------+---------+
| 1  | hello  | 1       |
| 2  | hello  | 2       |
| 3  | hello  | 3       |
| 4  | how    | 12      |
| 5  | how    | 15      | 
| 6  | are    | 453     |
| 7  | are    | 1       |
| 8  | you    | 3       |
| 9  | you    | 33      |
| 10 | you    | 453     |
+----+--------+---------+

我可以使用 PHP 来做到这一点。首先,我必须获取所有行并按 <br> 内爆它们然后再次插入它们。但现在我想知道,还有什么更好的解决办法吗? (特别是使用纯MySQL)

最佳答案

通过查询尝试此解决方案

SELECT @row := @row + 1 as row, t.word, t.number FROM (
    SELECT
      word,
      SUBSTRING_INDEX(SUBSTRING_INDEX(numbers, '<br>', n.digit+1), '<br>', -1) number
    FROM split_rec
    INNER JOIN 
        (SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) n
        ON LENGTH(REPLACE(numbers, '<br>' , '')) <= LENGTH(numbers)-n.digit
    ORDER BY id, n.digit
) AS t, (SELECT @row := 0) r 
WHERE t.number <> ''

输出

row word    number
1   hello   1
2   hello   2
3   hello   3
4   how     12
5   how     15
6   are     453
7   are     1
8   you     3
9   you     33
10  you     453

关于php - 如何使用 MySQL 将一条记录的值分解为多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34044000/

相关文章:

php - 为什么我会看到空白页?

javascript - PHP API JSON 响应

PHP & MySQL : most efficient method to check large array against database

php - 如何删除数组键中的前缀

php - 在 PHP 中避免空值时,我可以重新实现 isset 吗?

php - 在模式中提交表单不将数据保存到数据库

mysql - mediumint(10) 中的数字表示什么?

mysql - 对于每个 X,找到该 X 的平均 Y。 4 个查询

PHP 内爆不适用于单引号?

php - 转置二维数组,用逗号连接第二层,用管道连接第一层