PHP MySQL提取字段,然后在双空格处分割


PHP MySQL extract field then split at double spaces

我有一个包含行的表,每一行中有一个字段,其中包含由双空格分隔的人名。

我需要从每行中提取这个字段,然后将该字段拆分为单独的名称并转储到另一个表中。

最好的方法是什么?我拆分它在sql查询或提取字段,然后使用PHP拆分?

新信息:

好的,字段包含全称,例如john doe, tom smith等,双空格分隔全称,例如

JOHN DOE  TOM SMITH  JOHN WOO

字段中可能有一个名字,但也可能有多达10个

感谢

达伦

您可以在sql中完成。应该是这样的:

INSERT INTO tbl_dest (first_name, last_name) VALUES
(SELECT
    LEFT(ts.name, LOCATE('  ',ts.name)) AS first_name,
    SUBSTRING(ts.name, LOCATE('  ',ts.name)+2) AS last_name
FROM tbl_source AS ts)

正如@Marc B所说,它只会在数据一致的情况下工作(即每行的名称字段包含一个双空格,第一个双空格将名称和密码分开)。只需添加

,就可以忽略其他行(不含双空格)。
INSERT ...
(SELECT   ... 
FROM tbl_source AS ts WHERE LOCATE('  ', ts.name) > 0)

如果字段以双空格开头(即名为空),它也将被忽略

编辑:

,因为您说每行可以包含多对姓和名。下面是一个代码示例:

$query = "SELECT `name` FROM `tbl_source`";
$res = mysql_query($query, $link);
$names = array();
while ($row = mysql_fetch_assoc($res)) {
    $nmlist = explode('  ',$row['name']);
    for($i=0, $n=count($nmlist); $i<$n-1; $i+=2){
        $names[] = "('" . mysql_real_escape_string(stripslashes($nmlist[$i])) ."',"
                   ."'" . mysql_real_escape_string(stripslashes($nmlist[$i+1])) ."')";
    }
}
$insert_query = "INSERT INTO `tbl_dest` (`first_name`,`last_name`) VALUES "
          .implode(',', $names);
mysql_query($insert_query, $link);

在本例中,名字和姓氏之间以及每对

之间使用双空格

我不熟悉MySQL的解决方案。

我建议抓取你需要的信息,使用explode(' ', $info);,然后插入回数据库。