0

mysql テーブルの大まかな構造は、この Person Name, Mobile Number1, Mob2, Mob3, Mob4 のようなものです。

私がやろうとしていることは次のとおりです。たとえば、テーブルに同じ人物の4つのレコードがある場合:

Person Mob1 Mob2 Mob3 Mob4
John   123  
John   435
John   324
John   432

4 つのレコードを次のように 1 つに結合する必要があります。

Person  Mob1 Mob2 Mob3 Mob4
John    123  435  324  433

phpMyAdmin で mysql クエリを使用してこれを行うことは可能ですか? PHPスクリプトを使用してそれが可能であることは知っていますが、テーブルは500Mb近く(ほぼ100万レコード)と非常に大きいため、スクリプトは非常に遅くなり、完了するまでに非常に長い時間がかかります.

4

1 に答える 1

0

ストアドプロシージャを使用する必要があると思います。これらの他の投稿で(おそらく)役立つ情報を確認してください。

または、関数とgroup_concat()を使用してそれを実行することもできます。

CREATE FUNCTION SPLIT_STR(
  x VARCHAR(255),
  delim VARCHAR(12),
  pos INT
)
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
 LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
 delim, '');

そして、selectクエリは次のようになります。

SELECT
  tmp.id,
  SPLIT_STR(tmp.mobs, ',', 1) as mob1,
  SPLIT_STR(tmp.mobs, ',', 2) as mob2,
  SPLIT_STR(tmp.mobs, ',', 3) as mob3,
  SPLIT_STR(tmp.mobs, ',', 4) as mob4
  FROM (
    SELECT
      id,
      GROUP_CONCAT(mob1) as mobs
    FROM person
    GROUP BY name
  ) tmp

もちろん、それをUPDATEステートメントに統合する必要がありますが、それを自分で試してみましょう。(ところで、ここFUNCTIONから取得しました)。

于 2013-01-11T23:01:22.323 に答える