我有一个包含行的表,每一行中有一个字段,其中包含由双空格分隔的人名。
我需要从每行中提取这个字段,然后将该字段拆分为单独的名称并转储到另一个表中。
最好的方法是什么?我拆分它在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);
,然后插入回数据库。