0

ここでのコンテキストは、既存の Drupal 6 サイトから、Drupal や他の CMS を使用していない新しいサイトにユーザーを移行することです。Drupal は、少なくとも v6 では、追加のユーザー データを格納するためにかなり複雑なメカニズムを使用していました。

  • ユーザーデータがusersテーブルに入った
  • と呼ばれる別のテーブルでデータ キーを定義しました。profile_fields
  • と呼ばれるテーブルの実際の値profile_values

profile_values とユーザーが uid フィールドを共有しました。私の新しいサイトでは、このような構造になっている単一のユーザーテーブルを使用しています

CREATE TABLE IF NOT EXISTS `users` (
`uid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`rname` varchar(64)...

元の Drupal の profile_values テーブルでは、各ユーザーの rname エントリ (個別の uid) は、その uid と 14 の「fid」によって識別されます。

CREATE TABLE IF NOT EXISTS `profile_values` (
`fid` int(10) unsigned NOT NULL DEFAULT '0',
`uid` int(10) unsigned NOT NULL DEFAULT '0',
`value` text,...

私がする必要があるのは、profile_values テーブルから正しい値 (uid = UID & fid = 14) を取得し、users テーブルを更新する SQL を少し実行することです。これにはINNER JOINなどを使用する必要があると漠然と思っていますが、それは私のSQLスキルのレベル(私の最も貧弱なスイート)をはるかに超えています。これをどのように達成できるかについてのヒントをいただければ幸いです。

私が求めているものの図がここで役立つかもしれません

user表(前)

uid        name        rname
 1          Any         - empty prior to operation
 2          Eny         - empty prior to operation

profile_valuesテーブル

uid        fid      value
 1          13        v1-13
 1          14        v1-14
 2          11        v2-11
 3          14        v2-14 

user表(後)

uid        name        rname
 1          Any        v1-14
 2          Eny        v2-14
4

2 に答える 2

1

これは非常に単純な問題であり、データを結合する方法を学ぶ必要があります。

例を挙げますが、結合を実行する方法を学ぶために周りを見回してみてください。

この例では、LEFT JOIN を使用しています。ユーザーが rname を持っていない場合でも、このユーザーを結果に残しておきたいと考えています。

SELECT user.uid, user.name, profile_values.value as rname
FROM user 
    LEFT OUTER JOIN profile_values
        ON user.uid = profile_values.uid
WHERE profile_values.fid = 14

stackoverflow に関するいくつかの投稿を見てください。

于 2013-10-02T08:15:07.157 に答える
0

これがクエリになります

update user inner join profile_values on user.uid=profile_values.uid and profile_values.fid=14 set user.rname=profile_values.value
于 2013-10-02T08:16:06.087 に答える