मैं 24 घंटे की अवधि के भीतर MySQL से स्तंभों की एक सारांशित श्रेणी का चयन कैसे करूं? - php, mysql, चयन करें, शामिल हों

मेरे पास एक महत्वपूर्ण मात्रा में डेटा है जिसमें मैं 24 घंटे की अवधि के भीतर घटनाओं के आधार पर एक कॉलम के योग की गणना करने की कोशिश कर रहा हूं।

तालिका निम्नानुसार है:

ID          Customer    LOCATION  FROM_DATETIME     TO_DATETIME       Amount    24Revenue

23100470    Customer01  Idaho   2014-03-23 23:40    2014-03-24 00:00    8.20    26.65
23111106    Customer01  Idaho   2014-03-24 07:06    2014-03-24 07:26    0.00    22.14
23111865    Customer01  Idaho   2014-03-24 07:27    2014-03-24 07:30    0.00    22.14
23112909    Customer01  Idaho   2014-03-24 07:56    2014-03-24 08:06    3.69    22.14
23122768    Customer01  Idaho   2014-03-24 11:38    2014-03-24 11:46    3.28    18.45
23125519    Customer01  Idaho   2014-03-24 12:35    2014-03-24 12:38    1.23    15.17
23126385    Customer01  Idaho   2014-03-24 12:53    2014-03-24 13:00    2.87    13.94
23141213    Customer01  Idaho   2014-03-24 19:58    2014-03-24 20:16    7.38    11.07
23155172    Customer01  Idaho   2014-03-25 06:52    2014-03-25 07:01    3.69    3.69
23165719    Customer02  Idaho   2014-03-25 10:52    2014-03-25 13:34    44.97   70.21
23173857    Customer02  Idaho   2014-03-25 13:36    2014-03-25 13:43    2.87    25.24
23174971    Customer02  Idaho   2014-03-25 14:00    2014-03-25 14:04    1.64    22.37
23176607    Customer02  Idaho   2014-03-25 14:40    2014-03-25 14:52    4.51    20.73
23178488    Customer02  Idaho   2014-03-25 15:24    2014-03-25 16:04    0.00    16.22
23181743    Customer02  Idaho   2014-03-25 16:42    2014-03-25 17:45    16.22   16.22

इस समय मैं 1 सप्ताह की अवधि के लिए डेटा सेट चुन रहा हूं:

SELECT ID, Customer, from_datetime, to_datetime, location
WHERE to_datetime BETWEEN "2014-03-24 00:00:00" AND "2014-03-31"
AND location="Idaho";

यह क्वेरी $ recordet देता है।

Then using that dataset witin PHP, I am looping प्रत्येक रिकॉर्ड के माध्यम से और फिर उसी प्लेट के साथ सभी रिकॉर्ड्स के लिए राजस्व कॉलम को योग करने के लिए डेटाबेस से फिर से पूछताछ करना और उस समय के 24 घंटों के भीतर हुआ:

foreach ($recordset as $key => $value) {

$fromdate=date("Y-m-d H:i:s",strtotime($rsRentals[$key]["to_datetime"]));

$todate=strtotime(date("Y-m-d H:i:s", strtotime($fromdate)) . " +24 hours");


SELECT SUM(amount) as revenue WHERE plate="$recordset[$key]["plate"]"
AND location = "Idaho" AND to_datetime >= "$fromdate" AND from_datetime < "$todate"

}

मेरी समस्या यह है कि मेरी गणना के आधार पर (502 मिनट के भीतर रकम), इसमें ~ 20000 रिकॉर्ड के लिए लगभग 13-14 घंटे लगेंगे। यह बहुत लंबा तरीका है और मुझे लगता है कि इस क्वेरी को जॉइन या कुछ के साथ चलाने का एक आसान तरीका होना चाहिए, लेकिन मेरे प्रयास विफल हो गए हैं। ऊपर एकमात्र सेटअप है जिसे मैं सीमित डेटासेट के बावजूद सफलता के साथ करने में सक्षम हूं।

क्या किसी के पास एक ही परिणाम प्राप्त करने के लिए मैं क्या कर सकता हूं, लेकिन एक बहुत तेज़ और कुशल क्वेरी के बारे में सुझाव देता हूं?

उत्तर:

जवाब के लिए 0 № 1

प्लेटों की सूची को पकड़ने के लिए पहली क्वेरी का उपयोग करें,

फिर उसे एक बड़ी क्वेरी के लिए एक सबक्वायरी के रूप में डालें जहां आपकी प्लेट आपका समूह है और बाहरी क्वर्टी में आपका स्थान कहां है, जहां समय TO_DATETIME और TO_DATETIME-24 के बीच है


संबंधित सवाल
सबसे लोकप्रिय