1

我有以下信息的专栏:

Author  varchar(255)    utf8_general_ci

在我之前设计网站的程序员用这个专栏来存储两个东西!首先,作者的英文姓名,然后是他/她的阿拉伯语姓名!因此,该列中的所有数据都具有相同的结构:تووياما أيما (Tooyama Ema) 括号之间是英文名称。括号外是阿拉伯语的名称。有什么办法可以取英文名,放到一个新的栏目里。加上去掉括号?我可以同时使用 PHP 和 SQL,所以请你给我一个使用这两种语言的解决方案吗?我希望结果看起来像这样:

作者:تووياما أيما 作者英文:Tooyama Ema

我说的是具有相同结构的许多行。我想改变数据库中的结构。

4

2 回答 2

3

我推荐一个数据库驱动的解决方案,应该比使用 PHP 花费更少的时间编码和运行。

不确定表名,但这里是您需要的内容,根据您的喜好更改:

(假设粗略的表定义)

CREATE TABLE Test (
  id int(11) not null auto_increment,
  Author varchar(255),
  primary key (id)
)

新列的更改表:

ALTER TABLE Test ADD COLUMN `arabic_name` varchar(255) AFTER `Author`;
ALTER TABLE Test ADD COLUMN `english_name` varchar(255) AFTER `arabic_name`;

用于迁移数据的简单更新语句(不是最漂亮的,但工作正常):

 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);
于 2012-07-06T20:58:14.517 回答
3
$str = "تووياما أيما (Tooyama Ema)";
preg_match("/(.+) \((.+)\)/", $str, $matches);

var_dump($matches);
于 2012-07-06T20:35:39.720 回答