2012-10-23 6 views
0

설명하기가 다소 힘듭니다. 예를 들어 번호가 1 인 경우 숫자를 모두 한 번만 사용하면서 모든 가능한 숫자 조합을 얻으려고합니다. 3 그룹의 고유 한 조합 (10)를 통해하고 싶은 :가능한 모든 조합을 찾을 수있는보다 효율적인 방법

1,2,3 
4,5,6 
7,8,9 

이 잘하지만 나는 현재 내가 갖는 첫 번째 그룹에 대한 그래서 일부 테이블에 조인 데카르트를하고 있어요 :

1,2,3 
3,2,1 
1,3,2 
2,3,1 
2,1,3 

등 ... 이미 1,2,3 번 사용 했으므로 다른 모든 조합을 원하지 않습니다. 그것.

이것은 현재 사용하고있는 코드이며, SQL에서 원하는 것을 수행하는 방법을 잘 모르겠습니다. id1, id2, id3은 가능한 모든 조합을 찾으려고 시도하는 3 개의 숫자입니다.

INSERT INTO recipe_index 
SELECT distinct '3' as nummeals, t1.id as id1, t2.id as id2, t3.id as id3, 
t1.calories+t2.calories+t3.calories as calories, t1.protein+t2.protein+t3.protein as 
protein, t1.carbohydrate+t2.carbohydrate+t3.carbohydrate as carbohydrate, 
t1.fat+t2.fat+t3.fat as fat from recipes t1, recipes t2, recipes t3 

나는이 (중복을 생산하지 않고 모든 레시피 ID에 찍은 세 IDS의 모든 조합을 생성합니다

+0

SQL이 설정 기반을; 나는 이것이 SQL의 최선의 사용이라고 생각하지 않는다. – duffymo

+0

나는 이것이 야간 일의 무언가 일 것이기 때문에 정기적으로 달리지는 않았다. 현재 상태 (3 자리 숫자 그룹)에서 최대 6 자리 숫자 (각 숫자는 1 - 80 사이)까지 가져와야하므로 그 시점의 결과 값이 매우 높기 때문에 SQL (또는 다른 방법)에서보다 효율적인 방법을 찾으려고 노력합니다. – Neostim

+0

이전 주석 작성자는 SQL에 적합하지 않다고 동의합니다. 즉, 당신이하고있는 일은 데이터베이스에서 검색하는 집합의 멤버의 수학적 조합 [http://en.wikipedia.org/wiki/Combination]을 가져 오는 것입니다. SQL에서보다 코드에서 이것을하는 것이 더 나을 것입니다. – TAH

답변

3
INSERT INTO recipe_index 
SELECT t1.Id as t1Id, t2.id as t2Id, t3.id as T3id 
    t1.calories+t2.calories+t3.calories as calories, 
    t1.protein+t2.protein+t3.protein as protein, 
    t1.carbohydrate+t2.carbohydrate+t3.carbohydrate as carbohydrate, 
    t1.fat+t2.fat+t3.fat as fat 
FROM recipes t1 
JOIN recipes t2 on T2.id < t1.Id 
JOIN recipes t3 on t3.id < t2.id 

.. 내가 여기에 달성하기 위해 노력하고있어 어떤 의미가 희망 복제본이 동일한 ID이지만 다른 순서로 시퀀스를 포함한다고 생각한다면).

이제 문제를 이해하면 모든 ID를 한 번만 사용하는 모든 행 조합을 recipe_index에서 제외하려고합니다. (참고로 정확히 모두 ID를 한 번만 사용하십시오. 의미는 조리법 수가 3의 배수임을 의미합니다).

+0

고마워요! 이것은 잘 작동합니다! – Neostim

1

난이 있지만 작업 투약하는 방법을 잘 모르는 :

INSERT INTO recipe_index 
SELECT distinct '3' as nummeals, t1.id as id1, t2.id as id2, t3.id as id3, 
t1.calories+t2.calories+t3.calories as calories, t1.protein+t2.protein+t3.protein as 
protein, t1.carbohydrate+t2.carbohydrate+t3.carbohydrate as carbohydrate, 
t1.fat+t2.fat+t3.fat as fat from recipes t1 inner join recipes t2 on t1.Id < t2.Id inner join recipes t3 on t2.Id < t3.Id 
+0

잘 작동합니다! 감사 :) – Neostim

관련 문제