2015-01-07 3 views
0

이 테이블에는 group_id, product_id, order 필드가 포함 된 product_group 테이블이 있습니다. 하나의 양식보기는 새로운 레코드를 삽입하거나 기존의 레코드를 하나의 제출으로 업데이트 할 수있게합니다. 기존 행을 기반으로 제어 된 테이블 쿼리

나는 다음과 같은 삼가지 경우를 충당하기 위해 최적의 솔루션을 알아 내려고 노력 해요 :

  1. 사용자는 기존 행을 삽입하려고 :는 아무것도하지 않습니다. 여기서 3 개의 열에 대한 고유 색인이 유용 할 수 있습니다.

  2. 사용자가 주문 열만 변경하면이 업데이트됩니다.

  3. 사용자는 완전히 새로운 값 세트 인을 삽입합니다.

이 모든 것을 하나의 MySQL 쿼리에 넣을 수있는 방법이 있습니까? 그렇지 않다면, 여기서 가장 좋은 방법은 무엇입니까? 목표는 가능한 한 데이터베이스 쿼리를 제한하는 것입니다.

+0

저장 프로 시저가 좋을 것입니다. – octohedron

답변

1

원하는대로 할 수 있습니까? group_id, product_id에 고유 인덱스와 함께

insert into product_group(group_id, product_id, `order`) 
    values (@group_id, @product_id, @order) 
    on duplicate key update `order` = values(`order`); 

:

create unique index idx_product_group_2 on product_group(group_id, product_id) 

이것은 당신의 삼가지 경우 처리 : 값이 동일한 경우 값 할당은 어떤 조합이 없기 때문에

  1. 합니다.
  2. 다른 두 값이 동일한 경우 order 열이 업데이트됩니다.
  3. group_id 또는 product_id이 다른 새 행이 삽입됩니다.

참고로 order은 SQL 키워드이기 때문에 열의 형편없는 이름입니다.

+0

감사합니다. 두 개의 고유 색인이 필요하다는 것을 의미합니까? 하나는 모두 하나는 처음 두 개의 열을 나타냅니다. 주문 열은 제품이 표시된 제품의 명시적인 순서를 유지합니다. 이름을 바꿀거야. – lesssugar

+0

OK, 3 열 인덱스가 필요하지 않았습니다. 한 가지 : 잘못된 중복 문구 때문에'on duplicate key set '부분에서'SET'을'UPDATE'로 변경해야했습니다. 나는 그것을 위에서 편집했다. 고마워. – lesssugar

+0

3 개의 열 모두에 고유 한 인덱스가 필요하지 않다고 생각합니다. –

관련 문제