Php 使用SQL查询分离列中的行

Php 使用SQL查询分离列中的行,php,sql,split,substring,rows,Php,Sql,Split,Substring,Rows,我和你吵架了 (name1, name2, name3, name4) 和另一排 (2, 3, 4, 5, 7) 我需要在两列中显示该数据,名称和数字位于同一位置,如下所示: NAMES | NUMBERS -------------------- name1 2 name2 3 name3 4 name4 5 我尝试过使用substring_INDEX,但我首先重新设置了相同的数字我认为在MySQL中可能会采用类似的方式: CREATE TABLE t

我和你吵架了

(name1, name2, name3, name4)
和另一排

(2, 3, 4, 5, 7)
我需要在两列中显示该数据,名称和数字位于同一位置,如下所示:

NAMES  |  NUMBERS
--------------------
name1     2
name2     3
name3     4
name4     5

我尝试过使用substring_INDEX,但我首先重新设置了相同的数字

我认为在MySQL中可能会采用类似的方式:

CREATE TABLE t (names char(255), numbers char(255));
INSERT INTO t(names, numbers) VALUES('name1,name2,name3,name4', '2,3,5,7');

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.names, ',', idx), ',', -1),
       SUBSTRING_INDEX(SUBSTRING_INDEX(t.numbers, ',', idx), ',', -1)
FROM t, (select 1 idx union all select 2 union all select 3 union all select 4) r
这是完整的

当然,生成数字序列的子查询应该根据您的情况进行调整。关于stackoverflow如何实现这一特定任务,有许多示例

更新:

下面是一个如何处理一行中多达10000个元素的示例

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.names, ',', idx), ',', -1),
       SUBSTRING_INDEX(SUBSTRING_INDEX(t.numbers, ',', idx), ',', -1)
FROM t,
(SELECT @row := @row + 1 AS idx FROM
(SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) n,
(SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) n2,
(SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) n3,
(SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) n4,
(SELECT @row:=0) n5
WHERE @row < (SELECT max(LENGTH(NAMES) - LENGTH(REPLACE(NAMES, ',', '')) + 1)
FROM t))r

请注意,为了减少对字符串的操作量,我们首先使用子查询查找一行中的最大元素量。

我找到了答案,我使用了函数组\u CONCAT

,您可以尝试一下PIVOT@Alexander我想他有逗号分隔的值,想把它们分成两列,pivot不起作用。这是为什么不使用列进行多重性的一个很好的原因。这是一个很好的例子,但问题是我不知道我需要做多少值union@oded . . . 所以,只需输入一个大的数字列表,或者使用一个数值比实际需要的数值更多的数字表。