2014-12-29 10 views
7

का उपयोग कर एक में तीन MySQL क्वेरीज़ को मिलाएं मुझे दो MySQL क्वेरीज़ और सही डेटा प्राप्त करने में बहुत सारी परेशानी हो रही है।जॉइन

SELECT e.employee_id, 
    e.employee_name, 
    COUNT(s.sale_id) AS employee_sales 
FROM employees e, 
    sales s, 
    days d 
WHERE s.sale_id = '$sale_type' 
    AND d.day_year_id = '$year' 
    AND s.sale_day_id = d.day_id 
    AND e.employee_id = s.sale_employee_id 
GROUP BY e.employee_id 

फिर, प्रत्येक कर्मचारी परिणाम पर मैं प्रत्येक कर्मचारी बारे में विशेष जानकारी प्राप्त करने के लिए तीन प्रश्नों पर अमल:

सबसे पहले, कुल मिनट वे है पाने के लिए

मेरा पहला प्रश्न इस प्रकार है काम किया, मैं निम्नलिखित क्वेरी निष्पादित करता हूं। जब मैं पहली बार एक साथ इस एक में शामिल होने का प्रयास करते हैं, मैं मिनट वे काम किया है के सभी लौटने में परेशानी हो रही हूँ कि क्या वे किसी खास दिन पर एक बिक्री कर दिया है की परवाह किए बिना:

SELECT SUM(employee_day_end_minute-employee_day_start_minute) AS employee_minutes 
FROM employee_days ed, 
    days d 
WHERE ed.employee_days_employee_id = '$employee_id' 
    AND ed.employee_days_day_id = d.day_id 
    AND d.day_year_id = '$year' 

दूसरे, करने के लिए

और अंत में मैं एक औसत भार है जिसके द्वारा दिन और समय दिनों की वे काम किया है के आधार पर बिक्री मूल्यों गुणा करने के लिए मिलता है: काम के प्रकार मिलता है वे सबसे अधिक प्रदर्शन किया

SELECT (SUM(dw.day_weighting_value)/COUNT(s.day_weighting_value)) AS employee_weigting 
    FROM employee_days ed, 
    day_weightings dw, 
    days d 
WHERE ed.employee_day_employee_id = '$employee_id' 
    AND ed.employee_day_day_id = d.day_id 
    AND d.day_year_id = '$year' 
    AND dw.day_weighting_day_id = d.day_id 
    AND dw.day_weighting_minute >= ed.employee_day_start_minute 
    AND dw.day_weighting_minute <= ed.employee_day_end_minute` 

क्या कोई मुझे मार्गदर्शन प्रदान कर सकता है कि यह संभव है या नहीं, और यदि ऐसा है, तो इसके साथ कहां से शुरुआत करें?

अग्रिम धन्यवाद!

उत्तर

1

पहला और तीसरा प्रश्न शामिल होना आसान है। आप केवल एक सबक्वायरी लिखते हैं जो प्रत्येक कर्मचारी आईडी के लिए समूहीकृत परिणाम देता है, और उन सबक्विरीज़ को मूल क्वेरी में शामिल करता है।

SELECT p.employee_id, 
    e.employee_name, 
    COUNT(s.sale_id) AS employee_sales, 
    ed.employee_minutes, 
    edw.employee_weighting 
FROM employees e 
JOIN sales s ON e.employee_id = s.sale_employee_id 
JOIN days d ON s.sale_day_id = d.day_id 
JOIN (SELECT ed.employee_days_employee_id, SUM(employee_day_end_minute-employee_day_start_minute) AS employee_minutes 
     FROM employee_days ed 
     JOIN days d ON ed.employee_days_day_id = d.day_id 
     WHERE d.day_year_id = '$year' 
     GROUP BY ed.employee_days_employee_id) AS ed ON ed.employee_days_employee_id = e.employee_id 
JOIN (SELECT ed.employee_days_employee_id, (SUM(dw.day_weighting_value)/COUNT(s.day_weighting_value)) AS employee_weigting 
     FROM employee_days ed 
     JOIN day_weightings dw ON dw.day_weighting_minute >= ed.employee_day_start_minute 
           AND dw.day_weighting_minute <= ed.employee_day_end_minute 
     days d ON dw.day_weighting_day_id = d.day_id 
       AND ed.employee_day_day_id = d.day_id 
     WHERE d.day_year_id = '$year' 
     GROUP BY ed.employee_days_employee_id) AS edw ON edw.employee_days_employee_id = e.employee_id 
WHERE s.sale_id = '$sale_type' 
     AND d.day_year_id = '$year' 
GROUP BY e.employee_id 

मध्यम क्वेरी कठिन है। शायद इसे एक प्रश्न के रूप में लिखने का एक तरीका है जो कर्मचारी द्वारा समूहित शीर्ष नौकरी देता है, लेकिन अब मैं इसके बारे में नहीं सोच सकता।

संबंधित मुद्दे