2014-11-13 3 views
0

3 개의 테이블이 있으며 모두 PK와 FK로 연결되어 있습니다. 표는 내가 결과가 같은 것으로 기대했다 acc_bill열의 데이터 반복 방지

로부터 acc_bill, acc_info, PK ---> ID

TABLE : acc_info 

ID  | acc_no   | rate 
______________________________________ 
1  |   00001  |  0 
2  |   00002  |  21 
3  |   00003  |  21 
4  |   00004  |  21 

TABLE : acc_details 

id_dls | acc_type  | address   | **ID** 
________________________________________________________ 
1  |  store  |  pekan  | 1 
2  |  water plant |  raub   | 1 
3  |  store  |  kuantan  | 2 
4  |  pump house |  temerloh  | 2 


TABLE : acc_bill 

id_bill |  acc_no | charge_1  | charge_2 
________________________________________________________ 
1  |  00001  |  20.00  | 12.00 
2  |  00002  |  15.00  | 16.00 

, acc_details FROM acc_no FROM FK acc_info ---> ID, acc_no acc_details 있습니다 이

address  | acc_type  | acc_no  |  charge_1 | charge_2 
_________________________________________________________________________________ 
pekan  | store   | 00001  |  20.00 | 12.00 
raub  | water plant |     |    | 
kuantan  | store   | 00002  |  15.00 | 26.00 
temerloh | pump house  |     |    | 

하지만 내 쿼리의 결과에서의 acc_no/charge_1/charge_2는 문제를 일으키는 aswell 따라서 반복 때 SUM (charge_1)

어떻게 해결할 수 있습니까?

UPDATE

$result = mysql_query("SELECT address , acc_type , acc_bill.acc_no , charge_1 , charge_2 
         FROM acc_info , acc_details , acc_bill 
         WHERE acc_info.id = acc_details.id 
         AND acc_info.acc_no = acc_bill.acc_no 
         AND month ='".$month."' 
         AND acc_category= 'Telekom Malaysia'"); 

$result1 = mysql_query 
("SELECT SUM(charge_1) AS Total_1 , 
     SUM(charge_2) AS Total_2 
FROM acc_info , acc_details , acc_bill 
         WHERE acc_info.id = acc_details.id 
         AND acc_info.acc_no = acc_bill.acc_no 
         AND month ='".$month."' 
         AND acc_category= 'Telekom Malaysia'"); 
+0

실제 요청을 표시하는 것이 좋습니다. –

+0

mysql? 우리에게 지금까지의 일을 보여주십시오. – Edper

+0

SQL이 작동하는 방식입니다. SQL을 사용하여 비용을 줄 수있는 방법을 알지 못했습니다. 그러나 비용은 상점의 acc_Type에만 부과되어야한다고 말할 수 있다면 이것을 달성 할 수 있습니다. – xQbert

답변

0

검증되지 않은 : 아마도이하지만 ...

SELECT address, acc_Type, acc_no charge_1, charge_2 
FROM acc_info AI 
INNER JOIN acc_Details AD 
on AI.ID = AD.ID 
LEFT JOIN acc_bill AB 
on AI.acc_no = AB.Acc_no 
AND AD.acc_Type = 'store' 
ORDER BY AI.ID, AD.id_DLS 

무엇 후 당신은 처음 두 테이블의 모든 레코드 및 레코드 만입니다 경우 그 두 번째 테이블의 레코드가 acc_Type 저장소에있는 경우 세 번째 테이블에서 왼쪽 조인을 사용하고 저장소 유형에서만 조인하면됩니다.

스토어가 유일한 한정자라고 가정하고 두 번째 테이블의 항목 중 하나와 일치하는 경우에만 사용할 수 있습니다.이 점이 어느 것이 더 복잡합니까? 해당 하위 집합의 최소 또는 최대 ID를 얻어야합니다.

+0

아니요, 상점은 고유 한 한정자가 아니며 항상 사용자가 선택하지는 않지만 acc_no는 있지만 charge_1 및 2는 계속해서 더 많은 가치를 추가합니다. – itsfawwaz