2009-10-05 96 views
0

这是目前位于一列中的数据:拆分数据的多个列

“标题信息 - 公司在这里 - 城市在这里,ST”

ST代表状态即GA

有时候,我的数据看起来是这样的:

“标题信息 - 公司在这里 - 美国”

数据是名为“标题”列,是不带引号。

如何拆分此使用PHP,名为4个新列:

“NEW_TITLE”,“公司”,“城市”,“国家”

在第二个例子中不存在的城市,州只是国家,可以去“城市”专栏。

表模式:

CREATE TABLE table ( 
id int(8) NOT NULL DEFAULT '0', 
Title char(100) DEFAULT NULL, 
New_Title char(100) DEFAULT NULL, 
Company char(100) DEFAULT NULL, 
City char(100) DEFAULT NULL, 
State char(100) DEFAULT NULL, 
PRIMARY KEY (id) 
) 
ENGINE=MyISAM DEFAULT CHARSET=latin1; 

感谢您的时间。

OSSI

回答

1

上先拆 “ - ”,然后分裂的第三个元素返回上 “”

<?PHP 
$title = $row['title']; // or however you get the title. 
$parts = explode("-",$title); 
if (count($parts) != 3) die("Invalid title: $title"); 
$newtitle = $parts[0]; 
$company = $parts[1]; 
$location_parts = explode(',',$parts[2]); 
$city = $location_parts[0]; 
$state = $location_parts[1]; 

//now you've got $newtitle, $company, $city, and $state to do something productive with. 
+0

甜;)你会代码方便对我来说,插入这些呢?我有列'ID'作为关键。如果不是,我想清楚。再次感谢。 – Ossi 2009-10-05 05:16:50

+1

这对你来说是一个很好的练习,大量的关于写入数据库的教程:-) – timdev 2009-10-05 05:18:54

+0

它很好用。 如何抑制此工作注意:未定义偏移量:1它在此行上$ state = $ location_parts [1];它只发生,当没有状态。就像我说的,否则它会很棒;) – Ossi 2009-10-05 05:42:17

0

我看到2种方式:

第一:使用正则表达式像

(^[^-]*) - ([^-]*) - ([^,]*),?(.*)$

preg_match

第二:不要使用php代码。 SQL更新将是足够的

UPDATE mytable t SET t.title = SUBSTRING_INDEX(t.value, ' - ', 1), t.company = SUBSTRING_INDEX(SUBSTRING_INDEX(t.value, ' - ', 2), ' - ', -1), t.city = SUBSTRING_INDEX(t.address, ' - ', -1);

然后

UPDATE mytable t SET 
t.city = SUBSTRING_INDEX(t.city ',', 1), 
t.state = SUBSTRING(t.city, LENGTH(SUBSTRING_INDEX(t.city, ',', 1))+3);