2012-08-25 2 views
1

나는 자신의 이름과 다른 데이터를 저장하는 사용자에 대해이 테이블은 다음과 같이 수행 (벗었) 이잖아 한 삽입 :은 다른 테이블에서 삽입을 기반으로 하나 개의 테이블에 값이

CREATE TABLE `prod_users` (
     `p_user_id` INT(11) NOT NULL AUTO_INCREMENT, 
     `p_user_name` VARCHAR(200) NOT NULL DEFAULT '' 
      `p_comp_name` VARCHAR(300) NOT NULL DEFAULT '', 
     PRIMARY KEY (`p_user_id`) 
    ) 
    COLLATE='utf8_general_ci' 
    ENGINE=MyISAM 

때마다 사용자가 로그인을 그는 회사 이름도 제공 할 것입니다.

전화 번호와 같은 프로필 세부 정보를 저장하는 prod_profiles라는 또 다른 테이블이 있습니다. 팩스 번호. 새로운 사용자 가입 한 그의 세부 prod_users에 추가하는 경우 등

CREATE TABLE `prod_profiles` (
     `pf_gen_id` INT(11) NOT NULL AUTO_INCREMENT, 
      `pf_user_id` INT(11) NOT NULL DEFAULT '0', 
     `pf_user_name` VARCHAR(200) NOT NULL DEFAULT '' 
      `pf_comp_name` VARCHAR(300) NOT NULL DEFAULT '', 
     PRIMARY KEY (`pf_gen_id`) 
    ) 
    COLLATE='utf8_general_ci' 
    ENGINE=MyISAM 

, 자동으로 MySQL의 자체를 사용하여 prod_profile 그의 새로운 USER_ID, USER_NAME 및 COMP_NAME 세부 사항을 추가 할 수 있습니다? 각 사용자는 새로운 p_user_id를 갖기 때문에 우리는 그것을 알지 못한다. PHP를 사용하는 것은 어려울 것이다. 이 문제는 MySQL 자체 내에서 아무 문제없이 달성 될 수 있습니까?

+2

전체 prod_profiles 테이블이 필요없는 것 같습니다. 각 사용자가 하나의 프로파일 만 갖는 경우 두 번째 테이블의 필드 대부분이 첫 번째 테이블로 이동되어야합니다. 각 사용자가 여러 프로필을 가질 수 있으면 pf_user_name 및 pf_comp_name 필드를 저장할 필요가 없습니다. 단순히 pf_user_id 필드를 외래 키로 유지하십시오. –

+0

현재의 상황입니다. 그러나 누군가는 프로필 데이터를 로그인 데이터에서 제외시키는 것이 '좋은 아이디어'라고 결정했습니다. ( – Norman

답변

1

당신이 사용하기 위해 LAST_INSERT_ID()이 가능한 mysql_insert_id() 또는 mysqli::$insert_id, PDO::lastInsertId() 또는 무엇이든 당신의 API 제공을 통해 그것을 할 수 있기 때문에 그것은, PHP를 사용하여 어렵지 않다. 똑같은 스크립트 (연결에 따라 다름)에서 즉시 두 개의 INSERT 문을 호출하면 MySQL은 올바른 p_user_id을 제공합니다.

그러나, 당신은 자동으로 새로운 행을 작성하기 위해 MySQL을 강제하는 AFTER INSERT 트리거를 사용할 수 있습니다

CREATE TRIGGER build_profile AFTER INSERT ON prod_users 
FOR EACH ROW 
BEGIN 
    INSERT INTO prod_profiles 
    (pf_user_id, pf_user_name, pf_comp_name) 
    VALUES (NEW.p_user_id, NEW.p_user_name, NEW.p_comp_name) 
END 

검토에게 MySQL CREATE TRIGGER syntax reference를 자세한 내용 및 옵션.

+0

이것은 우리가 해. – Norman

1

다음 mysql 함수를 사용할 수 있습니다 : LAST_INSERT_ID(); 마지막 자동 증가 ID를 반환합니다.

따라서 사용자를 추가 한 다음 prod_profile을 추가하고 pf_user_id 값은 last_insert_id()의 반환 값이됩니다.

INSERT INTO `prod_users`(`p_user_name`,`p_comp_name`) VALUES('Dan' , 'Stackover') 
INSERT INTO `prod_profiles`(`pf_user_id`,`pf_user_name`,`pf_comp_name`) VALUES(LAST_INSERT_ID(),'Dan','Stackover') 

주의하십시오 나는 두 개의 서로 다른 테이블에서 같은 사용자에 대해 두 배의 사용자 이름과 COMPANY_NAME를 저장하는 것은 reall 낭비라고 말할 필요 ...

하여 DB에 대해 다시 생각하고 고려 구조 및 논리.

+0

바로 지금이 모든 것이 하나의 테이블에 있습니다. 그러나 이것이 그들이 원하는 방식입니다 :( – Norman

관련 문제