2014-11-21 6 views
0

아래 나와 같이 동일한 테이블과 조건으로 두 개의 다른 열 (count_group 및 group_total)을 선택합니다. 이 방법으로 페이지가 느려집니다. 어떠한 제안?mysql 다른 테이블에서 두 개의 열을 선택하십시오.

$sql3 = "SELECT SUM(mr.payment_amount) as total , 
COUNT(mr.order_id) as count_personal , 

(SELECT COUNT(DISTINCT mr.group_order_id) 
FROM event_mgmt_registration mr 
WHERE mr.event_nid = ".$nid." 
AND mr.status='completed' 
AND DATE_FORMAT(FROM_UNIXTIME(`datestamp`), '%Y-%m-%d') <= '".$Sum['latest_date']."' 
AND mr.group_order_id != '') as count_group , 

(SELECT SUM(mr.payment_amount) 
FROM event_mgmt_registration mr 
WHERE mr.event_nid = ".$nid." 
AND mr.status='completed' 
AND DATE_FORMAT(FROM_UNIXTIME(`datestamp`), '%Y-%m-%d') <= '".$Sum['latest_date']."' 
AND mr.group_order_id != '') as group_total 

FROM event_mgmt_registration mr 
WHERE mr.event_nid =".$nid." 
AND mr.status='completed' 
AND DATE_FORMAT(FROM_UNIXTIME(`datestamp`), '%Y-%m-%d') <= '".$Sum['latest_date']."' 
AND mr.order_id !=''"; 
+1

'설명'이 검색어에 대해 보여주는 것은 무엇입니까? –

+0

글쎄, 당신의 페이지가 느려지는 것을 느껴 보시겠습니까? 아니면 실제로 느리게 페이지합니까? 각 쿼리를 단독으로 측정하고 실행 시간에 대한 정보를 제공하고 EXPLAIN을 사용하여 MySQL이 쿼리를 실행하는 방법에 대한 적절한 정보를 얻습니다. – MatsLindh

답변

0

더 나은 성능을 위해 더 나은 UNION은 행과 세 가지 결과를 각각 얻을 않습니다

SELECT 
SUM(mr.payment_amount) as total , 
COUNT(mr.order_id) as count_personal 
FROM event_mgmt_registration mr 
WHERE mr.event_nid =".$nid." 
AND mr.status='completed' 
AND DATE_FORMAT(FROM_UNIXTIME(`datestamp`), '%Y-%m-%d') <= '".$molpaySum['latest_date']."' 
AND mr.order_id !='' 

UNION ALL 

(SELECT NULL, COUNT(DISTINCT mr.group_order_id) 
FROM event_mgmt_registration mr 
WHERE mr.event_nid = ".$nid." 
AND mr.status='completed' 
AND DATE_FORMAT(FROM_UNIXTIME(`datestamp`), '%Y-%m-%d') <= '".$molpaySum['latest_date']."' 
AND mr.group_order_id != '') 

UNION ALL 

(SELECT NULL, SUM(mr.payment_amount) 
FROM event_mgmt_registration mr 
WHERE mr.event_nid = ".$nid." 
AND mr.status='completed' 
AND DATE_FORMAT(FROM_UNIXTIME(`datestamp`), '%Y-%m-%d') <= '".$Sum['latest_date']."' 
AND mr.group_order_id != '') 
+0

$ query3 = db_query ($ sql3); $ 합계 = $ query3-> fetchAssoc(); $ 결과 = $ howeiSum [ 'count_group']; 오류 : 정의되지 않은 인덱스 : count_group, 미안 count_group 및 group_total 정의 할 수없는 노동 조합 문제가 무엇입니까? 총 및 count_personal은 괜찮습니다. –

+0

업데이트 된 답변을 사용해보십시오. – Benvorth

+0

내가 노동 조합은 첫 번째 선택 열 이름을 사용하므로 group_order_id 및 payment_amount가 total 및 count_personal에 있다는 것을 알게되었습니다. 조합 메서드 –

0

가 왜 모든 PARAM에 대한 질의를 필요로를? 당신은 내가 group_total 당신이 $Sum['latest_date']하지만 $molpaySum['latest_date']를 사용하는 것이

$sql3 = " 
    SELECT 
     SUM(mr.payment_amount) as total , 
     COUNT(mr.order_id) as count_personal , 
     COUNT(DISTINCT mr.group_order_id) as count_group, 
     SUM(mr.payment_amount) as group_total 

    FROM event_mgmt_registration mr 

    WHERE 
     mr.event_nid =".$nid." AND 
     mr.status='completed' AND 
     DATE_FORMAT(FROM_UNIXTIME(`datestamp`), '%Y-%m-%d') <= 
      '".$molpaySum['latest_date']."' AND 
     mr.order_id !='' 
"; 

참고하려고 생각하는 하나 개의 쿼리로 만들 수 있습니다. 오 프린트가 아니라면 다음과 같이이 검색어를 보관해야합니다.

$sql3 = " 
    SELECT 
     SUM(mr.payment_amount) as total , 
     COUNT(mr.order_id) as count_personal , 
     COUNT(DISTINCT mr.group_order_id) as count_group, 
     (SELECT SUM(mr.payment_amount) 
     FROM event_mgmt_registration mr 
     WHERE mr.event_nid = ".$nid." 
      AND mr.status='completed' 
      AND DATE_FORMAT(FROM_UNIXTIME(`datestamp`), '%Y-%m-%d') <= 
       '".$Sum['latest_date']."' 
      AND mr.group_order_id != '' 
     ) as group_total 

    FROM event_mgmt_registration mr 

    WHERE 
     mr.event_nid =".$nid." AND 
     mr.status='completed' AND 
     DATE_FORMAT(FROM_UNIXTIME(`datestamp`), '%Y-%m-%d') <= 
      '".$molpaySum['latest_date']."' AND 
     mr.order_id !='' 
"; 
관련 문제