MySQL组合表数据

时间:2013-10-02 08:11:01

标签: sql join

此处的上下文是将用户从现有的Drupal 6站点迁移到不再使用Drupal的新站点 - 或任何其他CMS。 Drupal,至少在第6版中,使用了一种相当复杂的机制来存储其他用户数据

  • 用户数据进入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表中,每个用户(不同的uid)的rname条目由该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

2 个答案:

答案 0 :(得分: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上的一些帖子:

答案 1 :(得分:0)

这将是查询

update user inner join profile_values on user.uid=profile_values.uid and profile_values.fid=14 set user.rname=profile_values.value