此处的上下文是将用户从现有的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
答案 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