Php 将一列分隔为两列(sql)
我有一个包含以下信息的专栏:Php 将一列分隔为两列(sql),php,sql,Php,Sql,我有一个包含以下信息的专栏: Author varchar(255) utf8_general_ci 在我之前设计网站的程序员用这个专栏来存储两样东西! 首先是英文的作者姓名,然后是阿拉伯文的作者姓名! 因此,该列中的所有数据都具有相同的结构: 括号之间是英文名称。括号外为阿拉伯语名称。 有没有办法把英文名字写进一个新的栏目。加上删除括号?我可以同时使用PHP和SQL,所以你能给我一个这两种语言的解决方案吗? 我希望结果如下所示: 作者: 英文作者:Tooyama Ema 我说的是许多
Author varchar(255) utf8_general_ci
在我之前设计网站的程序员用这个专栏来存储两样东西!
首先是英文的作者姓名,然后是阿拉伯文的作者姓名!
因此,该列中的所有数据都具有相同的结构:
括号之间是英文名称。括号外为阿拉伯语名称。
有没有办法把英文名字写进一个新的栏目。加上删除括号?我可以同时使用PHP和SQL,所以你能给我一个这两种语言的解决方案吗?
我希望结果如下所示:
作者:
英文作者:Tooyama Ema
我说的是许多具有相同结构的行。我想更改数据库中的结构。我建议使用数据库驱动的解决方案,与使用PHP相比,编码和运行所需的时间更少
$str = "تووياما أيما (Tooyama Ema)";
preg_match("/(.+) \((.+)\)/", $str, $matches);
var_dump($matches);
不确定桌子上的名字,但这是你需要的肉,根据你的喜好:
(假设粗略的表格定义)
新列的alter表:
ALTER TABLE Test ADD COLUMN `arabic_name` varchar(255) AFTER `Author`;
ALTER TABLE Test ADD COLUMN `english_name` varchar(255) AFTER `arabic_name`;
迁移数据的简单update语句(不是最漂亮的,但效果很好):
我推荐一个db驱动的解决方案,应该比使用PHP花更少的时间来编码和运行
不确定桌子上的名字,但这是你需要的肉,根据你的喜好:
(假设粗略的表格定义)
新列的alter表:
ALTER TABLE Test ADD COLUMN `arabic_name` varchar(255) AFTER `Author`;
ALTER TABLE Test ADD COLUMN `english_name` varchar(255) AFTER `arabic_name`;
迁移数据的简单update语句(不是最漂亮的,但效果很好):
听起来很简单。我什么都没试过。我不知道如何把它分开。列Author
有20000行。我想毫无错误地自动完成这一切。听起来很简单。我什么都没试过。我不知道如何把它分开。列Author
有20000行。我想毫无错误地自动完成这一切,但这只是一行,我想在所有行中完成。我想改变SQL中的结构。不是在PHP中。@shnisaka:您需要选择所有记录,进行处理,然后更新。我建议您将准备好的报表与交易结合使用。有关详细信息,请参阅。哦!我没想到!非常感谢。但这只是一行,我想在所有行中都这样做。我想改变SQL中的结构。不是在PHP中。@shnisaka:您需要选择所有记录,进行处理,然后更新。我建议您将准备好的报表与交易结合使用。有关详细信息,请参阅。哦!我没想到!非常感谢。这要明智得多。不需要做一次过的申请,我同意。这比另一个答案要好得多。=)+1这要明智得多。不需要做一次过的申请,我同意。这比另一个答案要好得多。=)+1.
UPDATE Test
SET
arabic_name = SUBSTR(TRIM(Author), 1, LOCATE(' ', TRIM(Author)) - 1),
english_name = SUBSTR(TRIM(Author), LOCATE('(', TRIM(Author)) + 1, LOCATE(')', TRIM(Author)) - LOCATE('(', TRIM(Author)) - 1);