2010-01-16 13 views
5

का उपयोग कर डेटा लाने के लिए MySQL क्वेरी को अनुकूलित करना मैं Google चार्ट एपीआई का उपयोग करके उत्पाद बिक्री रिपोर्ट के लिए एक लाइन चार्ट बना रहा हूं और डेटा को प्रति दिन आधार पर अलग कर रहा हूं, मूल रूप से एक ही लूप में एक ही क्वेरी को चलाने के साथ प्रत्येक दिन गोंद के रूप में यूनियन का उपयोग कर।समय सीमा

उदा। यूनियन का उपयोग करके 365 बार पूरे वर्ष की एक रिपोर्ट क्वेरी दोहराएगी।

मुझे लगता है कि यह एक सबसे अच्छा अभ्यास नहीं है- उदाहरण के लिए यदि कोई भी दयालु होगा और मुझे इस क्वेरी को अनुकूलित करने के सही दिशा में इंगित करेगा, तो मैं इसकी सराहना करता हूं।

SELECT SUM(op.qty) AS qty 
    FROM uc_order_products op 
    LEFT JOIN uc_orders o ON o.order_id = op.order_id 
    LEFT JOIN node n ON n.nid = op.nid 
    LEFT JOIN node_type nt ON nt.type = n.type 
    WHERE (o.created > 1247695200) AND (o.created < 1247781600) 
    AND (o.order_status = 'completed') 
    AND (nt.type = 'book' OR nt.type = 'digital_movie') 

    UNION ALL 

    SELECT SUM(op.qty) AS qty 
    FROM uc_order_products op 
    LEFT JOIN uc_orders o ON o.order_id = op.order_id 
    LEFT JOIN node n ON n.nid = op.nid 
    LEFT JOIN node_type nt ON nt.type = n.type 
    WHERE (o.created > 1247781600) AND (o.created < 1247868000) 
    AND (o.order_status = 'completed') 
    AND (nt.type = 'book' OR nt.type = 'digital_movie') 

    UNION ALL 

    SELECT SUM(....... 

सभी त्वरित उत्तर के लिए धन्यवाद! jspcal से क्वेरी उदाहरण के साथ, अपनी क्वेरी इस तरह समाप्त हो गया:

SELECT SUM(op.qty) AS qty, DATE_FORMAT(FROM_UNIXTIME(o.created),'%d-%m-%Y') AS day 
    FROM uc_order_products op 
    LEFT JOIN uc_orders o ON o.order_id = op.order_id 
    LEFT JOIN node n ON n.nid = op.nid 
    LEFT JOIN node_type nt ON nt.type = n.type 
    WHERE (o.created > 1247695200) AND (o.created < 1263596400) 
    AND (o.order_status = 'completed') 
    AND (nt.type = 'book' OR nt.type = 'digital_movie') 
    GROUP BY day 

और पीएचपी के साथ, मैं एक पूरी तिथि सीमा सरणी (मिलान सरणी कुंजी strtotime($data->day) साथ क्वेरी परिणाम से) गठबंधन कोई बिक्री के साथ दिन मिलता है।

+0

शायद मुझे याद आ रही है यहां कुछ नहीं है लेकिन आप केवल एक क्वेरी क्यों नहीं चलाएंगे जहां बनाया गया> आपकी समय सीमा की शुरुआत और <आपकी समय सीमा का अंत? –

उत्तर

1

आप दिन के अनुसार समूहबद्ध कर सकते हैं:

select sum(op.qty) as qty, date_format(o.created, '%Y-%m-%d') as day 
from ... where ... o.created >= subdate(now(), interval 1 year) and 
o.created <= now() group by day order by day 

डेटा में वर्ष के प्रत्येक दिन के लिए योग की रिपोर्ट करेंगे सेट

0

तुम कुछ करने के लिए

WHERE (o.created > 1247695200) AND (o.created < 1247781600) 
AND (o.order_status = 'completed') 
AND (nt.type = 'book' OR nt.type = 'digital_movie') 


WHERE (o.created > 1247781600) AND (o.created < 1247868000)  
AND (o.order_status = 'completed')  
AND (nt.type = 'book' OR nt.type = 'digital_movie') 

.... 

परिवर्तित करने में सक्षम हो सकता था

WHERE (
       (o.created > 1247695200) AND (o.created < 1247781600) 
      OR (o.created > 1247781600) AND (o.created < 1247868000) 
      ... 
     ) 
AND (o.order_status = 'completed') 
AND (nt.type = 'book' OR nt.type = 'digital_movie') 
संबंधित मुद्दे