【问题标题】:Split data to multiple columns将数据拆分到多列
【发布时间】:2009-10-05 04:56:50
【问题描述】:

这是当前位于一列中的数据:

“标题信息 - 此处的公司 - 此处的城市,ST”

ST代表状态,即GA

有时我的数据如下所示:

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

数据位于名为“title”的列上,并且没有引号。

如何使用 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; 

感谢您的宝贵时间。

奥西

【问题讨论】:

    标签: php mysql split


    【解决方案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.
    

    【讨论】:

    • Sweet ;) 你有方便我插入这些的代码吗?我将“id”列作为键。如果不正常,我想通了。再次感谢。
    • 这是一个很好的练习,到处都是关于写入数据库的大量教程 :-)
    • 效果很好。如何抑制这种磨损通知:未定义偏移量:1 它在此行 $state = $location_parts[1];只有在没有状态时才会发生。就像我说的,否则它的效果很棒;)
    • 在使用该值之前只需使用 empty() 进行测试。 if (!empty($parts[0])) $newtitle = $parts[0]; -风格
    • 试图用这个来压制通知: if (!empty($location_parts[1])) $state = $location_parts[1];也试过这个: if (isset($location_parts[1])) { $state = $location_parts[1];并且无法修复它。通知消失了,但现在下一条记录将获得以前的记录状态???我要睡觉了。
    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 2017-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多