1

次の情報が記載された列があります。

Author  varchar(255)    utf8_general_ci

私の前にウェブサイトをデザインしたプログラマーは、このコラムを使って2つのものを保存しました。最初に英語での著者の名前、次にアラビア語での彼/彼女の名前!したがって、その列のすべてのデータは同じ構造تووياما أيما (Tooyama Ema) になります。括弧の間に英語の名前があります。括弧の外側はアラビア語の名前です。英語の名前を新しい列に入れる方法はありますか?プラス括弧を削除しますか?PHPとSQLの両方を使用できるので、これら2つの言語で解決策を教えてください。結果を次のようにしたいと思います:

著者:تووياما أيما 英語の著者:Tooyama Ema

同じ構造の多くの行について話しています。データベースの構造を変更したい。

4

2 に答える 2

3
$str = "تووياما أيما (Tooyama Ema)";
preg_match("/(.+) \((.+)\)/", $str, $matches);

var_dump($matches);
于 2012-07-06T20:35:39.720 に答える
3

PHPを使用するよりも、コーディングと実行にかかる時間が短い、db駆動型のソリューションをお勧めします。

テーブル名はわかりませんが、必要なものは次のとおりです。好みに合わせて変更してください。

(の大まかなテーブル定義を想定)

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 に答える