현재 데이터베이스를 마이그레이션하고있는 레일 응용 프로그램이 있습니다. 두 개의 개별 테이블에서 두 개의 열을 연결하고 SQL을 사용하여 db에 삽입
는 이전에 그들은 두 개의 테이블이 있었다 : 사용자 및 기업 사용자 내에서하위 도메인 엔트리가를 기업 내에서 도메인 _의 항목이 있습니다.
사이트라는 새 테이블을 만들고 site_name이라는 하나의 열 (subdomain.domain_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
sites는 전체 도메인을 마이 그 레이션하려는 새 테이블입니다. user_sites 테이블을 통해 조인을 만드는 데 문제가 있습니다. 여기 대략 대략 내가 생각해 낸 것은 실패한 것이다.
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 : 내 문제의
일부는 내가 새 행을 만들 UPDATE를 사용하려고 한 것이 었습니다. 모든이
INSERT INTO user_sites (user_id) SELECT id FROM users;
가 그럼 난으로 만들 user_site에 USER_ID를 추가하여
내가 user_sites의 행을 작성하여 시작 : 여기
내가 사용자와 회사 테이블에서 데이터를 이동하는쪽으로 갔다 접근입니다 내가 user_sites의 사이트 ID를 설정 이후INSERT INTO sites (domain_name) SELECT id FROM users;
사용자가 같은 사이트에 많은 행
이제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
,
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
모든 마지막 도메인 부분을 제외하고 작동 CONCAT 도메인 이름과 도메인 이름을 업데이트 실패 부분. 확인하면 도메인이 모두 0입니다.
문제는 이제 조인 테이블을 필요로 합류했다. 귀하의 논리를 사용하여 계정에 추가 내부 조인을 추가하려고했지만 실패했습니다. 나는 더 명확하게하려고 노력하는 것을 만들기 위해 질문을 업데이트했다. –
"실패"란 무엇을 의미합니까? 오류가 있습니까? 잘못된? 결과? 결과가 없다 ? – scaisEdge
SQL을 사용하여 질문이 끝나면 실행될 것입니다 (레일 이동 파일에서 실행 중입니다).하지만 실제로는 아무것도 표시되지 않습니다. –