2011-08-04 2 views
-1

3 테이블이 있습니다 : 1. 사용자 - 여기서 "userd id"는 기본 키입니다 2. UserPermision - "userd id"는 외래 키이고 " pageid "coloumn 3. 페이지 - 여기에 페이지 ID가 기본 키입니다.MySQL 쿼리를 구현하는 로직이 필요합니다.

새 사용자 삽입시 새 사용자 삽입시 사용자 ID ="1 "이면이 사용자 ID 1을 Userpermision에 삽입해야합니다. 이 사용자에게는 페이지 테이블의 모든 페이지가 있습니다.

+0

질문 하나 : 사용자가 모든 premission가있는 경우 당신은 왜 permissionsystem 필요합니까? 나는 당신이 [INSERT TRIGGER] (http://dev.mysql.com/doc/refman/5.6/en/create-trigger.html) – Jacob

+0

을보아야한다고 생각합니다. 아무 것도 시도하지 않았 으면합니다. 작업? – marcelog

답변

1

InnoDB를 사용하고 있다고 가정합니다.
그런 경우 외래 키 제약 조건과 트랜잭션이 있습니다.

그렇지 않으면 트리거를 사용해야합니다.

START TRANSACTION; 

INSERT INTO users (name, etc) VALUES ('test', 'remainder'); 

SELECT last_insert_id() INTO @my_user_id; 

INSERT INTO userpermission (userid, permission, pageid) 
    SELECT 
    @my_user_id as user_id 
    , 'all' as permission 
    , pageid 
    FROM pages 
    WHERE pages.userid = @my_user_id; 

COMMIT; 

사용자가 이미 해당 페이지를 만든 것으로 가정합니다.

링크
http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html

+0

대단히 감사합니다 :) –

0

각 테이블마다 하나씩 두 개의 INSERT 쿼리가 필요합니다.

INSERT INTO Users (user_id,...) VALUES (:user_id,...) 

INSERT INTO UserPermission (user_id,page_id) 
SELECT :user_id, page_id FROM Page 

동일한 트랜잭션 내에서 실행하거나 사용자 테이블의 AFTER INSERT 트리거에서 두 번째 트랜잭션을 실행할 수 있습니다.

+0

일반적으로 테이블에 명시 적 id를 할당하지 않지만 MySQL이 auto_increment id를 알아낼 수 있도록합니다. – Johan

+0

@Frazz : 사용자 테이블에 새 사용자를 삽입했습니다. 이제는 사용자 권한 테이블에 동일한 사용자를 삽입해야하며 특정 사용자의 페이지 테이블에서 모든 페이지를 가져와야합니다. 예를 들어 내가 5 페이지를 누른 다음 권한 테이블에있는이 사용자가 5 페이지 레코드를 가지고 .. 여기에 내가 쿼리를 작성할 수 없습니다 ?? –