2011-10-22 5 views
0

나는 가능한 한 많은 PHP 코드를 저장하지 않으므로 생성하기에 까다로운 SQL 쿼리가 있습니다. MySQL : 동일한 쿼리에서 INSERT 및 SELECT

그래서 나는 방문자가 필드에 사용자 계정을 만들 수있는 HTML 양식을 이름, 이메일, 비밀번호, 관심. 이름, 이메일비밀번호 나는 여러 항목을 가질 수있는 데이터베이스 users에이 정보를 입력하는 간단한 INSERT 쿼리, 그러나 관심 필드가를 들어

이 데이터가 많은 -에 저장되도록 다 대다 조인 테이블 (interests, user_interests)입니다. 나를 user_interests, 나는 자동 증가 각각 "관심"에 대한 또 다른 INSERT를 통해 초기 INSERT 쿼리 플러스 루프에서 사용자가 선택한 있던 사용자 ID 번호를 받아야 표에 이러한 이익을 입력 순서에

. 하나의 SQL 쿼리에서이 모든 작업을 수행 할 수 있습니까?

+0

당신은이 쿼리 나 트랜잭션을 사용해야합니다. 'LAST_INSERT_ID()'가 유용 할 것입니다 : http://dev.mysql.com/doc/refman/5.1/en/information-functions.html#function_last-insert-id –

+1

아마도 네, INSERT INTO (cols. .) SELECT cols. . . FROM. . .하지만이 SQL을 실행할 때 어떤 테이블에 어떤 정보가 있는지를 설명해야합니다. –

답변

1

글쎄, MySQL에서는 INSERT 문이 한 테이블에만 삽입됩니다. 따라서 하나의 쿼리로이 작업을 수행하는 것은 불가능합니다. 하지만 두 가지 쿼리를 통해이 작업을 수행 할 수 있습니다. MySQL은 하나의 쿼리로 여러 행을 삽입 할 수있는 구문을 지원합니다 :

insert into user_interests (user_id, interest_id) values (1,1), (1,2), (1,3) 

P.S. 나는 관심사가 분류 자라는 것을 정확하게 이해하고 interests 테이블에 새로운 행을 추가하는 것이이 질문의 범위를 벗어납니다. 맞습니까?

+0

오라클은 하나의 INSERT로 둘 이상의 테이블에 삽입하는 방법을 제공합니다. http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_9014.htm#i2125362 –

+0

아, 그럼, 나는 내 말을 되 찾는다. : P –

+0

맞습니다. 관심 분야 테이블은 사용자가 선택할 수있는 일련의 선택 항목입니다. – Dan

1

한 명령으로이 작업을 수행하려면 MySql 저장 프로 시저를 작성하는 방법을 배우는 것이 좋습니다. 결과도 훨씬 빨라질 것입니다.

http://dev.mysql.com/doc/refman/5.0/en/stored-routines-last-insert-id.html

http://dev.mysql.com/doc/refman/5.0/en/sql-syntax-compound-statements.html

+0

그리고 어떻게 ID 목록을 저장 프로 시저에 전달할 계획입니까? 아마도 나는 뭔가를 잃어 버렸지 만, MySQL 매뉴얼에서 배열과 유사한 데이터 유형을 찾을 수는 없습니다. –

+0

쉼표로 구분 된 목록으로 전달한 다음 데이터를 구문 분석하고 여러 행이 포함 된 단일 삽입 문을 작성합니다. 분명히 쉽게 할 수있는 MySql 함수가 있습니다. SP를 작성하는 방법을 배우는 것은 모든 언어에서 보편적이기 때문에 프로그래밍에서 가장 가치있는 기술 중 하나입니다 (매개 변수로 호출하기 만 함) – Len

+0

힌트 : http : //dev.mysql.com/doc/refman/5.0/ en/loop-statement.html http://forums.mysql.com/read.php?98,235478,235683#msg-235683 – Len

관련 문제