Php 如何拆分每个逗号的列值?
我有一张这样的桌子:Php 如何拆分每个逗号的列值?,php,mysql,sql,Php,Mysql,Sql,我有一张这样的桌子: -- mytable +----+------------+ | id | value | +----+------------+ | 1 | one,ten | | 2 | nine,two | | 3 | five, one | +----+------------+ -- expected result: +----+-------+------+ | id | val1 | val2 | +----+-------+------+ |
-- mytable
+----+------------+
| id | value |
+----+------------+
| 1 | one,ten |
| 2 | nine,two |
| 3 | five, one |
+----+------------+
-- expected result:
+----+-------+------+
| id | val1 | val2 |
+----+-------+------+
| 1 | one | ten |
| 2 | nine | two |
| 3 | five | one |
+----+-------+------+
-- query
SELECT id, value FROM mytable
-- then
$vals = explode(",", $rows['value']);
foreach($vals as $val){
//do stuff
}
SELECT id,
SUBSTRING_INDEX(value,',', 1) as val1,
SUBSTRING_INDEX(value,',', -1) as val2
FROM mytable
value
列的值始终由两部分组成,这两部分与,
组合在一起。现在我想在两个单独的列中选择它们,如下所示:
-- mytable
+----+------------+
| id | value |
+----+------------+
| 1 | one,ten |
| 2 | nine,two |
| 3 | five, one |
+----+------------+
-- expected result:
+----+-------+------+
| id | val1 | val2 |
+----+-------+------+
| 1 | one | ten |
| 2 | nine | two |
| 3 | five | one |
+----+-------+------+
-- query
SELECT id, value FROM mytable
-- then
$vals = explode(",", $rows['value']);
foreach($vals as $val){
//do stuff
}
SELECT id,
SUBSTRING_INDEX(value,',', 1) as val1,
SUBSTRING_INDEX(value,',', -1) as val2
FROM mytable
我该怎么做
我可以通过PHP这样做:
-- mytable
+----+------------+
| id | value |
+----+------------+
| 1 | one,ten |
| 2 | nine,two |
| 3 | five, one |
+----+------------+
-- expected result:
+----+-------+------+
| id | val1 | val2 |
+----+-------+------+
| 1 | one | ten |
| 2 | nine | two |
| 3 | five | one |
+----+-------+------+
-- query
SELECT id, value FROM mytable
-- then
$vals = explode(",", $rows['value']);
foreach($vals as $val){
//do stuff
}
SELECT id,
SUBSTRING_INDEX(value,',', 1) as val1,
SUBSTRING_INDEX(value,',', -1) as val2
FROM mytable
但是我想知道,我可以在mysql中这样做吗?为此,您可以使用函数
INSTR()
找到逗号的位置,然后使用LEFT()
和RIGHT()
将它们拆分为您需要的两列,如下所示:
SELECT id
,LEFT(value,INSTR(value,',')-1) AS val1
,RIGHT(value,CHAR_LENGTH(value)-INSTR(value,',')-1) AS val2
FROM mytable
可以使用
SUBSTRING\u索引(字符串、分隔符、计数)
这样做:
-- mytable
+----+------------+
| id | value |
+----+------------+
| 1 | one,ten |
| 2 | nine,two |
| 3 | five, one |
+----+------------+
-- expected result:
+----+-------+------+
| id | val1 | val2 |
+----+-------+------+
| 1 | one | ten |
| 2 | nine | two |
| 3 | five | one |
+----+-------+------+
-- query
SELECT id, value FROM mytable
-- then
$vals = explode(",", $rows['value']);
foreach($vals as $val){
//do stuff
}
SELECT id,
SUBSTRING_INDEX(value,',', 1) as val1,
SUBSTRING_INDEX(value,',', -1) as val2
FROM mytable
您的桌子设计为1NF。。解决这个问题first@Pரதீப் “1NF”是什么意思?而且这不是我的表的设计,它实际上是函数返回的内容。我必须组合它们,因为mysql函数只返回一个值。现在我需要把它们分开。我有一张像这样的表格。这句话引导我写评论。。INF表示将原子值存储在一列中,但不超过一个值。请参阅。