Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

PHP का उपयोग करके MySQL क्वेरी को JSON में बदलें

योग जुड़ने के कारण अपेक्षा से बड़ा है। कल्पना कीजिए कि एक ट्रैक_न्यूट्रिशन रिकॉर्ड और दो ट्रैक_फैटीग रिकॉर्ड में एक निश्चित तारीख होती है, फिर जॉइन यह बना देगा कि पहली टेबल के डेटा को एक बार पहले ट्रैक_फैटीग्यूरेकॉर्ड के साथ जोड़ा जाता है, और फिर दूसरे रिकॉर्ड के साथ। इस प्रकार वही nf_sugarsvalue योग में दो बार गिना जाएगा। यह व्यवहार औसत को भी प्रभावित करेगा।

इसलिए आपको पहले एग्रीगेशन करना चाहिए, और उसके बाद ही जॉइन करना चाहिए।

दूसरे, यह सुनिश्चित करने के लिए कि आप सभी डेटा को पकड़ लें, भले ही किसी निश्चित तिथि के लिए सभी तालिकाओं में मान न हों, आपको पूर्ण बाहरी जुड़ाव का उपयोग करना चाहिए। यह गारंटी देगा कि प्रत्येक तालिका में प्रत्येक रिकॉर्ड परिणाम में अपना रास्ता खोज लेगा। अब, MySQL इस तरह के पूर्ण बाहरी जुड़ाव का समर्थन नहीं करता है, इसलिए मैं 4 तालिकाओं से सभी अलग-अलग तिथियों का चयन करने के लिए एक अतिरिक्त उप-चयन का उपयोग करता हूं और फिर उन्हें अन्य समेकित डेटा के साथ "बाएं शामिल" करता हूं:

SELECT      dates.date,
            IFNULL(average_ticnum_n, 0)            as average_ticnum 
            IFNULL(average_fatiguenum_n, 0)        as average_fatiguenum  
            IFNULL(average_stressnum_n, 0)         as average_stressnum
            IFNULL(sum_nf_sugars_n, 0)             as sum_nf_sugars 
            IFNULL(sum_nf_total_carbohydrate_n, 0) as sum_nf_total_carbohydrate  
FROM        (
                    SELECT DISTINCT user_id,
                                    date
                    FROM (
                            SELECT   user_id,
                                     date
                            FROM     track_ticseverity
                            UNION     
                            SELECT   user_id,
                                     date
                            FROM     track_fatigue
                            UNION     
                            SELECT   user_id,
                                     date
                            FROM     track_stress
                            UNION     
                            SELECT   user_id,
                                     date
                            FROM     track_nutrition
                    ) as combined 
            ) as dates
LEFT JOIN   (
                    SELECT   user_id,
                             date,
                             AVG(ticnum) as average_ticnum_n
                    FROM     track_ticseverity
                    GROUP BY user_id,
                             date) as grp_ticseverity
        ON  dates.date = grp_ticseverity.date
        AND dates.user_id = grp_ticseverity.user_id
LEFT JOIN   (
                    SELECT   user_id,
                             date, 
                             AVG(fatiguenum) as average_fatiguenum_n
                    FROM     track_fatigue
                    GROUP BY user_id,
                             date) as grp_fatigue
        ON  dates.date = grp_fatigue.date
        AND dates.user_id = grp_fatigue.user_id
LEFT JOIN   (
                    SELECT   user_id,
                             date,
                             AVG(stressnum) as average_stressnum_n
                    FROM     track_stress
                    GROUP BY user_id,
                             date) as grp_stress
        ON  dates.date = grp_stress.date
        AND dates.user_id = grp_stress.user_id
LEFT JOIN   (
                    SELECT   user_id,
                             date,
                             SUM(nf_sugars) as sum_nf_sugars_n,
                             SUM(nf_total_carbohydrate) as sum_nf_total_carbohydrate_n
                    FROM     track_nutrition
                    GROUP BY user_id,
                             date) as grp_nutrition
        ON  dates.date = grp_nutrition.date
        AND dates.user_id = grp_nutrition.user_id
WHERE       dates.user_id = 1
ORDER BY    dates.date;

ध्यान दें कि उस विशेष तिथि के लिए कोई डेटा नहीं होने पर आपको कुछ कॉलम में 0 मान मिलेंगे। यदि आप NULL प्राप्त करना पसंद करते हैं इसके बजाय, उपरोक्त क्वेरी में उन कॉलम से Nvl() को हटा दें।

फिर, 0 - 10 पैमाने पर सभी डेटा को सामान्य करने के लिए, आप प्रत्येक प्रकार के मूल्य के लिए अधिकतम पाया जा सकता है और रूपांतरण के लिए इसका उपयोग कर सकते हैं, या यदि आप पहले से जानते हैं कि श्रेणियां प्रति प्रकार क्या हैं, तो शायद इसका उपयोग करना बेहतर है जानकारी, और शायद कोड जो SQL में भी हो।

हालांकि, यह हमेशा थोड़ा अजीब लगता है कि मूल्यों को एक ग्राफ में जोड़ा जाता है जो वास्तव में अलग-अलग पैमानों का उपयोग करता है। ऐसे रेखांकन के साथ कोई भी आसानी से गलत निष्कर्ष पर पहुंच सकता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - मिन खोजें लेकिन शून्य नहीं

  2. JDBC Resultबड़े डेटासेट लाने का आंतरिक तंत्र सेट करें

  3. दी गई तालिका में प्रत्येक विषय के शीर्ष 3 टॉपर कैसे खोजें

  4. स्ट्रिंग dd/MM/yyyy दिनांक को java.sql.date yyyy-MM-dd में कनवर्ट करें

  5. तालिका सिंटैक्स त्रुटि बनाएँ