2010-07-19 6 views
1

약간의 배경 때문에 내가하려는 것을 이해할 수 있습니다. 두 개의 사용자 입력 제품을 사용하여 서로 호환되는지 확인하는 페이지를 만들고 있습니다. 이것은 n 개의 제품이 있기 때문에 n + 1 * n의 mySQL 테이블입니다. 나는 아직 시간을 절약하기 위해, 모든 제품 자체와 호환되는지 알고 row = column 이름을 기준으로 mySQL 테이블을 업데이트하십시오.

name a b c d e 
a 
b 
c 
d 
e 

처럼

이 표는 보이는, 내가

를 얻을 수 있도록 자동으로 테이블을 채울 것입니다 쿼리가 내가 언급하는 것을 잊었다
name a b c d e 
a  1 
b   1 
c     1 
d      1 
e       1 

감사

각 제품은 여러 가지 다른 제품과 호환이 될 수 있습니다. 대각선은 시작 지점에 불과합니다.

답변

5

하지 귀하의 질문에 직접 대답하지만 난 그것을 언급했다 느꼈다 ...

다음에 설계를 변경하는 것을 고려한다 가능하다면 :

 
compatible_products 
product1 product2 
a  b 
a  c 
b  d 
etc... 

당신이 행을 삽입하는 경우 모두 (a는 b)와 (B는) 다음 쿼리는 간단하다 : 또한

SELECT 1 
FROM compatible_products 
WHERE product1 = 'a' AND product2 = 'b' 

, 당신이 당신의 데이터베이스 스키마를 변경할 필요가 없습니다 새로운 제품을 추가 할 때.

+0

각 제품은 다른 여러 제품과 호환 될 수 있습니다. 당신의 대답은 여전히 ​​적용됩니까? (저는 꽤 MySQL에 익숙합니다.) – tom

+0

@tom : 예 - 예제에서 테이블 a는 b 및 c와 호환 가능하고 b는 d와 호환됩니다. –

+0

오, 좋은 지적이야. 감사. 단지 내 호기심을 충족시키기 위해 내가가는 방식대로 할 수있는 방법이 있습니까? – tom

3

질문에 대한 답변이 아니지만 설계상의 실수로 들릴 수 있습니다.

이렇게하면 새 제품이 나올 때마다 테이블에 새 열을 추가해야합니다.

훨씬 더 좋은 방법은 테이블을 productscompatibility 테이블로 정규화하는 것입니다.

제품과 다른 제품 간의 호환성은 각각 하나의 레코드가됩니다.

compatibility 테이블은 다음과 같이 수 :

id product1 product2  

0 12   34   
1 33   32   
2 54   1   
3 65   328  

쿼리가 매우 쉽게 될 것입니다. 관계를 찾으려면 간단해야 할 것입니다.

SELECT id FROM compatibility WHERE (product1 = 18 and product2 = 23) 
           OR (product1 = 23 and product2 = 18) 
관련 문제