2014-12-05 2 views
1

테이블이 두 개 있습니다 gbook입니다. 구조는 둘 다 동일합니다.테이블 간의 자동 증가

id title author isbn year 

그때 해당 테이블에 데이터를 전송하는 두 개의 서로 다른 PHP 페이지에 두 개의 웹 양식이 - '예약 양식'와 'G 예약 양식을'.

'도서 양식'을 제출할 때 도서 표 ID가 성공적으로 증가하고 'G 도서 양식'을 제출하면 gbook 표 ID가 증가합니다. 하지만, 두 테이블간에 ID가 조인/공유되는 방식으로 테이블을 설정하는 방법은 무엇입니까? 즉, 마지막 양식 삽입이 중단 된 위치에서 ID가 자동으로 증가합니다.

내 책 양식을 사용하면 책 정보를 수동으로 추가 할 수 있으므로이 방법을 사용하는 이유는 무엇입니까? 'G 도서 양식'은 Google 도서 API를 사용하여 도서 정보를 자동으로 채 웁니다.

이상적으로는 내 테이블을 다음과 같이 설정하십시오.

id 
1 
2 
4 
5 
8 
9 

그리고 gbook 표는 같은 것을하는 단계;

id 
3 
6 
7 

여기에 새로운 php/mysql이 있으므로 조언이나 방향에 대해 감사드립니다. 필요한 경우 기존 코드를 제공 할 수 있습니다.

+4

왜 그렇게하고 싶습니까? 지원되지 않는 기능은 수행하지 않는 좋은 징조입니다. –

+0

이유가 업데이트되었으므로이 점에 대해 다시 한 번 알려 주시면 감사하겠습니다. –

+0

오라클, SQL 서버, 포스트그레스 등의 다른 데이터베이스는 모든 테이블에 적용 할 수있는 정의 가능한 시퀀스를 가지고 있지만 MySQL은 그렇지 않습니다. 하나의 테이블의 최대 값을 검사하는 저장 프로 시저를 실행하는 것 외에 다른 하나는 최상의 솔루션이 둘 모두를 하나의 테이블에 배치하는 것이라고 생각합니다. – Lucas

답변

3

아마도 가장 좋은 방법은 같은 표에 책을 넣고 책의 유형을 지정하는 특수 열을 넣는 것입니다.

+0

이 작업은 각각 'g'또는 'm'을 추가하는 새로운 열을 만들었습니다. –

4

대체이 도움이 될 수 있습니다. 모든 데이터를 하나의 추가 열 (FK)을 추가하고 다른 테이블 도서 유형으로 작성하십시오.

tbl_books

id booktype_id title author isbn year 


tbl_booktypes

id type 
+0

그레타 아이디어 감사합니다 –

1

당신이 PHP를 통해 달성 할 수 있습니다. 테이블 중 하나에 변경이있을 때마다 대체 쿼리를 실행해야합니다. 예를 들면 다음과 같습니다. book 테이블에 값을 삽입하는 경우 mysql_insert_id()을 사용하여 해당 테이블의 증분 ID를 얻고이를 alter query에 사용합니다.

$id = mysql_insert_id() + 1; 
    ALTER TABLE tablename AUTO_INCREMENT= $id; 

이 방법은 권장되지 않으며 표준적인 방법은 아니지만.

1

다른 아이디어 :

두 테이블에서 자동 증가를 비활성화합니다.SQL 명령 MAX(iD)을 사용하여 두 표에서 가장 큰 값을 읽고 결과를 증가 시키십시오. 결과는

Select MAX(iD) From Book Form입니다. 변수에 저장하십시오. 그런 다음 Select MAX(iD) from G Book Form을 저장하십시오. 두 값을 비교하고 하나씩 증가시킵니다.

하지만 내 생각에 가장 좋은 아이디어는 blue112에서 비롯된 것입니다. 때때로 데이터베이스의 셸을 일반화하는 것이 좋습니다.

+0

감사 합니다이 옵션을 살펴 보겠습니다. –