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

आरक्षण प्रणाली के लिए अगली उपलब्ध तिथि खोजने के लिए SQL क्वेरी में सहायता करें

निम्नलिखित आपको जाना चाहिए। आप मेरे "Current_Date ()" फ़ंक्शन के नमूने को समायोजित करना चाह सकते हैं, जो भी आपकी आरक्षण की आरंभ तिथि और इतने दिनों तक बाहर जाने के लिए हो सकता है ....

यह क्वेरी में MySQL इनलाइन चर का उपयोग करता है। आंतरिक क्वेरी कुछ प्रारंभिक तिथि (current_date() ) के आधार पर आरक्षण (@r) चर की एक साधारण तैयारी है, और आइटम तालिका में शामिल हो जाती है। नो जॉइन क्लॉज करने से, यह अन्यथा प्रत्येक आइटम के लिए एक तारीख ले लेगा। मेरे परिदृश्य में, मैं केवल 30 दिनों के लिए बाहर जाने पर विचार कर रहा हूँ, इसलिए मैंने पहले 30 वस्तुओं की एक सीमा लागू की है। मुझे पर्याप्त रिकॉर्ड देने के अलावा कोई आधार नहीं है, इसलिए मुझे 30 रिकॉर्ड्स की एक अस्थायी तालिका बनाने की आवश्यकता नहीं है (या कितने दिन आप बाहर जाना चाहते हैं)। यह एक उपनामित क्वेरी "जस्टडेट्स" बनाता है और इसमें एक कॉलम "ओपनडेट" होता है। यह परीक्षण करने के लिए दिनांक सीमाओं का आधार है।

यह अब आइटम तालिका में शामिल हो गया है, लेकिन कोई भी शर्त प्रत्येक तिथि के लिए कार्टेशियन नहीं बनाती है, प्रत्येक आइटम के साथ तुलना करें ... WHERE क्लॉज के अनुसार, मैं केवल "एबीसी 123" मौसम के एसकेयू वाले आइटम्स से चिंतित हूं, उनके पास 10 सीरियल हैं #s या 100. यह अब मुझे 300 या 3000 (10 सीरियल आइटम @ 30 दिन, या 100 सीरियल आइटम @ 30 दिन।)

अब जब मेरे पास उपलब्धता की जांच करने के लिए सभी व्यक्तिगत सीरियल नंबरों और संभावित दिनों की "रेंज" है, तो मैं अब आरक्षण प्रणाली के खिलाफ पूछताछ कर सकता हूं। तो, एक उप-चयन के माध्यम से, और किसी दिए गए मिलान SKU, सीरियल #, और आरक्षण में संभावित तिथि के लिए नहीं, मैं केवल उन लोगों को रखना चाहता हूं जहां दिया गया ओपनडेट नहीं मिला है। मैंने आपकी टेबल संरचनाओं का अनुकरण किया है और कुछ आइटम, एकाधिक सीरियल नंबर और कंपित आरक्षण तिथि सीमाएं डाल दी हैं और यह बहुत अच्छा काम करता है...

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

select  items.sku,
        items.serial_number,
        JustDates.OpenDate
    from 
        ( SELECT 
                 @r:= date_add(@r, interval 1 day ) OpenDate
            FROM 
                 (select @r := current_date()) vars,
                items limit 30 ) JustDates,
        items
    where 
            sku = "ABC123"
        and sku not in ( select sku from Reservations
                            where items.sku = reservations.sku
                              and items.serial_number = reservations.serial_number
                              and justDates.OpenDate >= reservations.start_date
                              and justDates.OpenDate <= reservations.end_date )
    order by 
       items.serial_number,
       justDates.OpenDate


  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. मैं MySQL में डेटटाइम फ़ील्ड के घंटे के हिस्से से किसी क्वेरी को कैसे फ़िल्टर कर सकता हूं?

  3. Laravel 5 PDOException ड्राइवर नहीं ढूँढ सका

  4. वर्डप्रेस वेबसाइटों के लिए डेटाबेस विफलता

  5. सिद्धांत और समग्र अद्वितीय कुंजी