2013-07-15 4 views
0

하나의 테이블에 항목 비용이 나열된 설치가 있습니다. 다른 표에는 남아있는 항목의 수를 나열합니다.두 테이블의 수량 비교

두 테이블을 비교하고 왼쪽 항목이 비용보다 적은 행이 하나 이상 있으면 false를 반환하고 싶습니다.

Heres는 테이블 설정 예 :

table for costs

//note there can be multiple ingredients per materialID 
ID | materialID | IngredientID | quantity_per_one 
1 |  4  |  5  |  50 

table for user's available ingredients

ID | UserID | IngredientID | quantity 
2 | 3 |  5  | 46 

Heres는 예제 시나리오 :

사용 R이가 그 비용을 의미 5 x materialID: 4

구입 : 위의 데이터와 함께, 그는 분명히 따라서 결과가 count()과 거짓 또는 전혀 행을 반환해야 충분하지 않습니다 (50 x 5) of IngredientID 5합니다.

현재 나의 현재 방법은 PHP에서 행 루프를 가져 와서 하나씩 확인하는 것입니다.하지만 SQL을 통해 camparison을 바로 수행 할 수 있다면 루프를 저장하지 않아도됩니다.

SQL로 가능합니까?

답변

1

는 그냥 IngredientID 열을 기반으로 두 개의 테이블을 조인 :

SELECT MIN(quantity_per_one * 5 <= quantity) AS has_enough 
FROM costs 
INNER JOIN user_ingredients USING (IngredientID) 

has_enough의 값 중 하나를 0입니다 (성분 충분하지 않습니다) 또는 1 (모든 성분은 존재한다).

+0

한 문제는, 내가 내 질문을 수정거야 언급하는 것을 잊었다 비용 테이블에 주어진 materialID 여러 요소가있을 수있다! 죄송합니다 : P – Sir

+0

@Dave 답변이 업데이트되었습니다. –

+0

완벽! 고맙습니다. @ 잭 – Sir

0

성분 수 :

SELECT count(id) FROM costs WHERE material = 4; 

계산 :

SELECT count(i.id) FROM costs as c, ingredients as i 
WHERE i.ingredient = c.ingredient AND i.quantity >= (c.per * 2); 

가 동일한 경우, 사용자가 재료의 구매를받을 수 있습니다.

SqlFiddle : http://sqlfiddle.com/#!2/5bcba/11