2012-04-15 4 views
0

이 데이터가 주어지면 나는 합계 (tbl_basket subt)을 곱하고, 할인을 곱하고, 운송료를 추가하려고합니다.MySQL에서 여러 계산을 수행하는 방법은 무엇입니까?

# tbl_basket order_id qty price  subt 
        1 1 10.00 10.00 
        1 4  5.00 20.00 
        1 3 12.00 36.00 

# tbl_coupon  id   name discount 
        1  "10% off" 10.00 

# tbl_shipping  id     cost 
        1     4.99 

# tbl_order coupon_id shipping_id total 
        1    1  ? # I want to update total 

나는 바구니 조회 할 :

SELECT * FROM tbl_basket WHERE order_id = $order_id 

합계 항목은이 같은 생각?

SELECT SUM(subt) FROM tbl_basket WHERE order_id = $order_id 

쿼리 할인

SELECT discount FROM tbl_coupon AS coupon 
      INNER JOIN tbl_order AS order 
       WHERE coupon.id = order.coupon_id 

Q)는 어떻게 MySQL은 다른 하나에이 쿼리를 병합합니까? 할인 (새 총 = 총 * (100-할인)/100) 이후에 값을 설정하려면 어떻게

Q)는

나는,이 데이터베이스에서 직접 합계를 합산하여 시스템보다 강력한 만들 것 먹으 렴을 느꼈다 왜 내가 이런 식으로하고 싶었는지.

Q) 더 좋은 방법이 있습니까?

도움 주셔서 감사합니다.

+2

일반적으로 큰 웹 사이트의 경우 데이터베이스 서버의 부하가 적을수록 좋습니다. PHP로 모든 것을 할 수 있습니다. – evan

+0

고마워, 나는 그 일을 끝낼지도 모른다. 교육적인 목적으로 MySQL에서이 작업을 수행하는 몇 가지 방법을 알고 싶습니다. @evan – Ozzy

답변

2

나는 evan에 동의한다. PHP로 계산하는 것이 훨씬 좋다. 그 밖의 것이 없다면, 당신이하는 일을 더 잘 볼 수 있습니다!

하지만 당신은 정말 SQL에서 어떻게 생겼는지보고 싶다면,이 같은 시도 할 수 있습니다 :

SELECT ((select total price query)*(select discount query) + (select shipping query)) 

물론, 당신은 하나의 쿼리 문에 모든 것을 얻을 수있는 하위 쿼리와 함께합니다. 더 많이 추가할수록 디버깅이 어려워집니다. PHP에서는 조각을 조립하는 것이 훨씬 쉽습니다.

행운을 비네.

+0

답변 해 주셔서 감사합니다. 따라서 그것을 수행하는 방법은 합계를 구하기 위해 수학 연산자를 하위 SELECT 문에 적용하는 것입니다. @geoB – Ozzy

1

나는 또한 오버 헤드에 약간의 차이가 있지만 PHP에서 이렇게해야한다고 말한 다른 사람들과 동의하는 경향이 있습니다. 다음 쿼리를 사용하여 필요한 모든 인덱스가있는 한 최소의 오버 헤드로 최종 합계를 계산할 수 있습니다.

SELECT (SUM(b.subt) * ((100 - MIN(c.discount))/100)) + MIN(s.cost) AS final_total 
FROM tbl_order o 
INNER JOIN tbl_basket b 
    ON o.id = b.order_id 
INNER JOIN tbl_shipping s 
    ON s.id = o.shipping_id 
INNER JOIN tbl_coupon c 
    ON c.id = o.coupon_id 
WHERE o.id = 1 
GROUP BY o.id; 
+0

그게 훨씬 더 감사합니다 – Ozzy

+1

@nnichols - 오버 헤드 차이는 계산을 다른 컴퓨터로 모두 이동할 수 있다는 것입니다. 일반적으로 저렴한 프런트 엔드 웹 서버를 구입할 수 있습니다. 데이터베이스 서버는 종종 병목 현상이 많으며 대개 가격이 비쌉니다. 물론, 이것은 대기업을위한 대규모 웹 사이트에 대해 이야기 할 때만 적용됩니다. – evan

+0

@evan 전적으로 동의합니다. 내 경우에는 그러나, 친구 (작은 웹 신생 기업)에 대한 프로젝트를하고. – Ozzy

관련 문제