2009-10-05 126 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);