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

PHP/MySQL अपॉइंटमेंट/बुकिंग सिस्टम के लिए सर्वोत्तम अभ्यास

अंत में मैं एक ऐसी प्रणाली के लिए गया जिसने डेटाबेस में प्रारंभ और समाप्ति तिथियों के लिए टाइमस्टैम्प उत्पन्न किया। जाँच करते समय मैंने शुरुआत में एक सेकंड जोड़ा और नियुक्तियों के लिए किसी भी अतिव्यापी समय से बचने के लिए अंत से एक सेकंड घटाया।

मैंने आखिर क्या किया

जाहिर है मुझे यकीन नहीं है कि यह सबसे अच्छा अभ्यास है, लेकिन इसने मेरे लिए काम किया। उपयोगकर्ता अपने लिंग और दिन के लिए वरीयता का चयन करके शुरू करता है। यह उपलब्ध कार्मिक और विभिन्न प्रकार के अपॉइंटमेंट प्रकारों (जैसे बालों को रंगना, बाल काटना, आदि) प्राप्त करने के लिए एक AJAX अनुरोध भेजता है।

जब सभी सेटिंग्स का चयन किया गया है (लिंग, तिथि, व्यक्तिगत और प्रकार) मैं कुछ सरल सत्यापनों से शुरू करता हूं:तिथि की जांच करना, यह जांचना कि क्या तिथि ("एन") 7 (रविवार) नहीं है। अगर सब कुछ ठीक रहा, तो ज़्यादा ज़रूरी चीज़ें शुरू हो गई हैं:

1) अपॉइंटमेंट प्रकार डेटाबेस से प्राप्त किया जाता है जिसमें इस प्रकार के कुल समय (30 मिनट, 45 मिनट, आदि) शामिल हैं) 2) उपलब्ध व्यक्तिगत प्राप्त किया जाता है (उस दिन लोगों की एक पूरी सूची या सिर्फ एक व्यक्ति यदि एक चुना जाता है) उनके उपलब्ध समय सहित

व्यक्ति (या एक व्यक्ति) को तब लूप किया जाता है, जो अपने शुरुआती समय से शुरू होता है। इस समय मेरे पास डेटा का एक सेट है जिसमें शामिल हैं:

$duration (of the appointment type)
$startTime (starting time of the person selected in the loop)
$endTime (= $startTime + $duration)
$personStart (= starting time of the person)
$personEnd (= end time of the person)

आइए इस डेमो डेटा को लें:

$duration = 30 min
$startTime = 9.00h
$endTime = 9.30h
$personStart = 9.00h
$personEnd = 12.00h

मैं यहाँ क्या कर रहा हूँ:

while( $endTime < $personEnd )
{
    // Check the spot for availability
    $startTime = $endTime;
    $endTime = $startTime + $duration;
}

जाहिर है, इस मामले में यह सरल है। क्योंकि जब मैं उपलब्धता की जांच करता हूं, और स्पॉट फ्री नहीं होता है। मैंने $स्टार्टटाइम को नवीनतम अपॉइंटमेंट के बराबर होने के लिए सेट किया है और लूप में वहां से शुरू होता है।

उदाहरण:

I check for a free spot at 9.00 but the spot is not free because there's an appointment from 9.00 till 10.00, then 10.00 is returned and $startTime is set to 10.00h instead of 9.30h. This is done to keep the number of queries to a minimum since there can be quiet a lot.

उपलब्धता फ़ंक्शन जांचें

// Check Availability
public static function checkAvailability($start, $end, $ape_id)
{
  // add one second to the start to avoid results showing up on the full hour
  $start += 1;
  // remove one second from the end to avoid results showing up on the full hour
  $end -= 1;

  // $start and $end are timestamps
  $getAppointments = PRegistry::getObject('db')->query("SELECT * FROM appointments WHERE
    ((
        app_start BETWEEN '".date("Y-m-d H:i:s", $start)."' AND '".date("Y-m-d H:i:s", $end)."' 
          OR
        app_end BETWEEN '".date("Y-m-d H:i:s", $start)."' AND '".date("Y-m-d H:i:s", $end)."'
      ) 
    OR
      (
    app_start < '".date("Y-m-d H:i:s", $start)."' AND app_end > '".date("Y-m-d H:i:s", $end)."'
     ))
    AND
     ape_id = ".PRegistry::getObject('db')->escape($ape_id));

    if(PRegistry::getObject('db')->num_rows($getAppointments) == 0) {
      return true;
    } else {
      $end = 0;
      foreach(PRegistry::getObject('db')->fetch_array(MYSQLI_ASSOC, $getAppointments, false) as $app) {
        if($app['app_end'] > $end) {
          $end = $app['app_end'];
            }
    }
    return $end;
     } 
}

चूंकि मैं नियुक्तियों को "प्रेषक:10.00 से:11.00" के रूप में संग्रहीत कर रहा हूं, इसलिए मुझे 11:00:01 से 11:59:59 तक स्पॉट की जांच करना सुनिश्चित करना होगा, क्योंकि अन्यथा 11:00 बजे की नियुक्ति परिणामों में दिखाई देगी।

फ़ंक्शन के अंत में, यदि कोई अपॉइंटमेंट मिलता है, तो मैं परिणामों को लूप करता हूं और नवीनतम अंत लौटाता हूं। ऊपर बताए गए लूप में यह अगली शुरुआत है।

उम्मीद है कि यह किसी के लिए भी मददगार हो सकता है। जैसे ही जानकारी:ape_id "नियुक्ति व्यक्ति" की आईडी है जिससे यह जुड़ा हुआ है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डेटाबेस के रूप में सोलर सर्च इंडेक्स का उपयोग करना - क्या यह गलत है?

  2. Oracle क्लाउड प्लेटफ़ॉर्म पर MySQL डेटाबेस सेवा के साथ Oracle JDeveloper का उपयोग करना, भाग 2

  3. MYSQL में स्टॉप शब्द कैसे रीसेट करें?

  4. फ्लास्क-कीमिया में तालिका के नाम को ओवरराइड करना

  5. PHP - MySQL डेटबेस से रिकॉर्ड्स को मानों के रूप में उपयोग करके चेक बॉक्स बनाएं