2009-10-12 3 views
0

나는 무엇인가를하는 가장 효율적인 방법을 찾고 있으며 조언을 주시면 감사하겠습니다!MySQL - 테이블의 두 번째 시퀀스 (예 : 카테고리 별)

나는 다음과 같은 열이있는 테이블이 있습니다

id 
category 
category_sequence 
other_columns 

ID는 자동 증가 열 및 기본 키입니다. 카테고리는 사용자가 UI에서 선택합니다.

  • 1 : 내가하고 싶은 무엇

    같은 싶습니다 몇 행을 삽입 예를 들어, 해당 카테고리 + 1

    가장 높은 기존 category_sequence하는 category_sequence를 생성입니다 , 1,1-

  • 2, 1, 2
  • 3, 2, 1
  • 4, 1, 3
,536,

등등.

분명히 가장 높은 category_sequence를 추출하여 하나를 추가 한 다음 insert 문을 실행할 수있는 쿼리를 실행할 수 있습니다. 하지만 훨씬 더 효율적인 방법이 있습니다 (삽입물 중 일부는 상당히 큰 루프에있을 것이므로 속도를 높이고 교차를 방지하는 것이 좋습니다). 당신이 가정 사전에

감사합니다, 케빈

+1

왜'category_sequence' 대신'id'를 사용할 수 없습니까? 그것은 동시대 상황에서 위대한 일을 할 것입니다. 당신이해야 할 유일한 일은'id'로 레코드를 정렬하고 어플리케이션 측에 증분 카운터를 추가하는 것입니다. –

답변

1

당신은

insert into mytable 
    select "categoryselected",coalesce(max(category_sequence),0)+1 from mytable where category = "categoryselected" 

당신이 그 범주에 대한 첫 번째 레코드 인 경우뿐만 아니라 case 문에 포장해야 할 수도 있습니다 시도 할 수 있습니다. 난 그것을 테스트 할 MySQL이 없어

+0

위대한 - 이것은 나를 위해 대접했습니다! coalesce 함수는 첫 번째 행이면 0을 반환하므로 대/소문이 필요하지 않습니다. 도움 주셔서 감사합니다. – websushi

0

은을 의미하는 카테고리, 당신이 거기에 next_sequence 필드를 가질 수있는 "분류"테이블이 있습니다. 그런 다음 테이블에 다음 시퀀스 번호를 가져 와서 category_sequence 열에 넣고 next_sequence 필드를 증가시키는 삽입 트리거를 만듭니다 (모두 단일 트랜잭션에서 수행해야 함).

+0

옵션으로 생각하지 않았습니다. 입력 해 주셔서 감사합니다. – websushi

0

당신은 auto_increment 필드를 category_sequence로 변경 한 다음 데이터베이스를 만들 수 있습니다. 그런 다음 기본 키 카테고리 + category_sequence를 만듭니다. 그런 다음 ID 필드를 삭제할 수 있습니다. ID 필드는 사용자가 원하는 것을 수행하지 않으므로 삭제할 수 있습니다. MySql은 category_sequence 필드를 정확히 설명합니다.

+0

응답 해 주셔서 감사합니다. 불행히도 'id'필드는 다른 시스템 기능을 위해 필요합니다. – websushi