我有一个我当前正在迁移db的铁路应用程序。
以前他们有两个表:用户和公司
在用户中有一个子域条目,在公司内部有一个domain_name条目。
我创建了一个名为站点的新表,现在正在尝试拥有一个称为subdomain.domain_name的site_name的列。
我知道如何使用Ruby来实现这一目标,但是转换我们所有的用户真的很慢。
我可以做类似:
的事情
execute("UPDATE sites s SET s.site_name=(SELECT sub_domain FROM users WHERE user_id=s.user_id) + '.' + (SELECT domain_name FROM companies WHERE user_id=s.user_id)")
编辑:
这是更新的问题。
我现在还有一个额外的表。
users
|_ id
|_ email
|_ sub_domain
companies
|_ id
|_ domain_name
sites
|_ id
|_ site_name
user_sites
|_ id
|_ user_id
|_ site_id
站点是我正在创建的新表,并希望将整个域迁移到。我很难创建通过用户_SITE表的加入。这大致是我提出的那是不成功的。
UPDATE
sites s
INNER JOIN user_sites us ON s.id=us.site_id
INNER JOIN (
SELECT a.id, concat(a.sub_domain, '.', b.domain_name) site_address
FROM
users as a
INNER JOIN companies as b ON a.company_id=b.id ) t ON t.id=us.user_id
SET
s.site_name = t.site_address
编辑2:
我问题的一部分是我试图使用更新来创建新行。
这是我从用户和公司表中移动数据的方法:
我首先通过将user_id添加到每个user_site
中在用户_site中创建行INSERT INTO user_sites (user_id) SELECT id FROM users;
然后,我在站点上与有用户一起创建任意数量的行
INSERT INTO sites (domain_name) SELECT id FROM users;
之后,我将site_id设置为user_sites
UPDATE user_sites us
INNER JOIN users u ON us.user_id=u.id
INNER JOIN sites s ON s.domain_name=u.id
SET site_id=s.id WHERE us.user_id=u.id
现在,失败的部分是使用Concat域名更新域名
UPDATE sites s
INNER JOIN
user_sites us ON s.id=us.site_id
INNER JOIN (
SELECT a.id, concat(a.wp_username, '.', b.domain_name) site_address
FROM users as a
INNER JOIN
white_labels as b ON a.white_label_id=b.id
) t ON t.id = us.user_id
SET domain_name=site_address
除最后一个域部分外,一切都起作用。当我检查时,这些域都是零的。
在MySQL中,您可以使用基于表的Select COPANE的更新与表连接在一起
UPDATE sites s
INNER JOIN (
select a.user_id, concat(a.sub_domain, '.', b.domain_name) united_name
FROM users as a
INNER JOIN companies as b on a.user_id= b.user_id ) t on t.user_id = s.user_id
SET s.site_name = t.united_name