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,...

我需要做的是执行一些 SQL,它将从 profile_values 表中获取正确的值(对于 uid = UID & fid = 14)并更新 users 表。我隐约怀疑这将需要使用 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 回答