2013-03-14 5 views
0

단계 ID가없는 경우에만 모든 사용자에 대해 테이블 ​​단계에서 행 (usersteps)을 삽입하려고합니다.데이터를 하나의 테이블로 정규화

INSERT INTO userssteps 
(status,user_id,step_id) 
SELECT 
'0' , 
(SELECT DISTINCT id from users), 
(SELECT DISTINCT id from steps) 

나는 위의 MYSQL에 다음과 같은 오류가

#1242 - Subquery returns more than 1 row 

이유 : 나는 새로운 단계를 만들 경우 새로운 사용자 가입 한 그들이 모든 단계가, 내가 그것을 만들고 싶어 취득한다 현재 사용자가 볼 수있는 사용자 단계입니다.

이 작업을 수행하는 좀 더 영리한 방법이 있다면 알고 싶지만 나는 혼란 스럽습니다. 나는 또한 cakePHP를 사용하고 있는데, 특별한 cakePHP 방법이 있다면 그것을 선호 할 것입니다.

steps: 
id 
name 

users: 
id 
username 
password 

userssteps: 
id 
user_id 
step_id 
status 
+0

'steps' 테이블에서'user_id' 칼럼을 사용하는 것은 무엇입니까? – matts

답변

1

직교 제품을 만드는 것처럼 보입니다. http://en.wikipedia.org/wiki/Cartesian_product.

사용자와 단계 테이블간에 관계가 없으면 합쳐질 수없고 곱해진다.

INSERT INTO userssteps 
(status,user_id,step_id) 
select 0, 
users.id, 
steps.id 
from users 
inner join steps 
0

테이블 구조는이 방법을 시도해보십시오

INSERT INTO userssteps 
(status,user_id,step_id) 

select 0 as status, 
users.id,steps.id 
from users 
inner join steps 
on (users.id=steps.user_id); 

그런 식으로이 일을해야한다)

PS를 : 지금 가입 권리입니다.

살루 도스.

+0

감사합니다. 아래 쿼리가 결과를 0으로 반환한다는 것을 제외하고는 아무 것도 삽입되지 않았으므로 우리는 가깝습니다. 현재 3 개의 행이 단계적으로 존재하며 2 명의 사용자가 있습니다. 따라서 userssteps 테이블에 6 개의 행이 존재할 것으로 예상됩니다. 정말 고마워! – AshHimself

+0

위의 테이블 구조도 포함 시켰습니다. – AshHimself

+0

나는 편집 할거야 ... 그냥 기다려;) – Hackerman

0

하위 쿼리 (사용자의 SELECT DISTINCT id) 및 (SELECT의 DISTINCT id from steps)는 모든 ID를 반환합니다. insert 절에는 하나의 값만 필요합니다 (하나 이상의 값을 가질 수 없습니다). 두 테이블을 ID로 묶어보세요.

관련 문제