2013-05-19 3 views
1

표 1MySQL의 여러 테이블로 합계() 및 그룹

--------------------------------------- 
| id | item | MU | quantity | file_id | 
--------------------------------------- 
| 1 |item1 | oz | 3.5  | 003  | 
| 2 |item2 | kg | 1.1  | 001  | 
| 3 |item1 | oz | 0.2  | 001  | 
| 3 |item1 | kg | 3  | 001  | 

표와 선택이

---------------------------- 
| id | date  | file_id | 
---------------------------- 
| 1 |timestamp1 | 001 | 
| 2 |timestamp2 | 002  | 
| 3 |timestamp3 | 003  | 

난 할 노력하고있어하는 각 그룹에 대해 양의 합을 선택하는 것입니다 동일한 MU가있는 항목 중 나는이 쿼리로 그 일을 처리한다.

$query = "SELECT item,SUM(quantity) from table1 GROUP BY item,mu"; 

with a great result, exactly what i wanted 
---------------------------------- 
| id | item | MU | SUM(quantity) | 
---------------------------------- 
| 1 |item1 | oz | 3.7   | 
| 2 |item2 | kg | 1.1   | 
| 3 |item1 | kg | 3    | 

하지만 지금은 내가 어떻게 자신의 FILE_ID 날짜가 두 개의 타임 스탬프 사이에 있는지 행합니까?

+0

각 테이블의 기본 키는 무엇입니까? – Strawberry

답변

2

당신은이 LEFT JOIN를 사용하여 하나에 두 개의 테이블을 조인 달성하기 위해 관리 할 수 ​​있습니다 검색어로 현재 initialdatefinaldate을 현재 시간 기록으로 대체하십시오.

$query = "SELECT a.id, a.item, a.mu, SUM(a.quantity) as total_quantity from table1 a left join table2 b ON a.file_id = b.file_id WHERE b.date BETWEEN initialdate AND finaldate GROUP BY a.item,a.mu"; 
+0

위대한, 나는 mysql에 대해 더 많이 읽어야한다는 것을 알고 있었다. JOIN : D, 내 머리 속에는 매우 명확하지 않다 :), thanks – user348078

+0

@ user348078 당신은 환영받는 사람이다! – Fabio

+0

그래서 모든 이들이 귀하의 쿼리에 의해 (테이블 1) 해당 항목이 세 번째 테이블에있는 항목을 반환하는 경우 원하십니까? – user348078

3

INNER JOIN을 사용하여 두 테이블을 결합 할 수 있습니다. 쿼리의 결과는 두 날짜 사이에 일치하는 Table1에서 items 만 표시합니다. 그렇지 않으면 결과 목록에 포함되지 않습니다.

SELECT MIN(a.iD) ID, a.item, a.MU, 
     SUM(a.quantity) totalQuantity 
FROM table1 a 
     INNER JOIN table2 b 
      ON a.file_ID = b.file_ID 
WHERE b.date BETWEEN startDateHere AND endDateHere 
GROUP BY a.item, a.MU 

조인에 대해 더 친절하게 아래의 링크를 방문, 더 많은 지식을 얻을 수 :

+0

나는 이것을 원한다고 생각합니다. 'INNER JOIN'을 사용하십시오. –

+0

위대한 자원, 고마워;) – user348078

+0

환영합니다':)' –