Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何拆分每个逗号的列值?_Php_Mysql_Sql - Fatal编程技术网

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表示将原子值存储在一列中,但不超过一个值。请参阅。