Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Praktik terbaik untuk sistem Janji Temu/Pemesanan PHP/MySQL

Pada akhirnya saya menggunakan sistem yang menghasilkan cap waktu untuk tanggal mulai dan berakhir dalam database. Saat memeriksa, saya menambahkan satu detik ke awal dan mengurangi satu detik dari akhir untuk menghindari waktu yang tumpang tindih untuk janji temu.

Apa yang akhirnya saya lakukan

Jelas saya tidak yakin ini adalah praktik terbaik, tetapi itu berhasil untuk saya. Pengguna mulai dengan memilih jenis kelamin mereka dan preferensi untuk hari itu. Ini mengirimkan permintaan AJAX untuk mendapatkan personel yang tersedia dan berbagai jenis janji temu (misalnya mewarnai rambut, memotong rambut, dll).

Ketika semua pengaturan telah dipilih (jenis kelamin, tanggal, pribadi dan tipe) saya mulai dengan beberapa validasi sederhana:memeriksa tanggal, memeriksa apakah tanggal ("N") bukan 7 (Minggu). Jika semuanya baik-baik saja, hal yang lebih penting dimulai:

1) Jenis janji diambil dari database termasuk jumlah total waktu yang dibutuhkan jenis ini (30 menit, 45 menit, dll)2) Pribadi yang tersedia diambil (daftar lengkap orang pada hari itu atau hanya satu orang jika satu dipilih) termasuk waktu yang tersedia

Personil (atau satu orang) kemudian dilingkarkan, dimulai dengan waktu mulai mereka sendiri. Pada titik ini saya memiliki satu set data yang berisi:

$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)

Mari kita ambil data demo ini:

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

Apa yang saya lakukan di sini adalah:

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

Jelas, itu al disederhanakan dalam kasus ini. Karena saat saya cek ketersediaan, dan spotnya tidak gratis. Saya menyetel $startTime agar sama dengan janji temu terbaru yang ditemukan dan mulai dari sana dalam perulangan.

Contoh:

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.

Periksa fungsi ketersediaan

// 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;
     } 
}

Karena saya menyimpan janji temu sebagai "Dari:10.00 Hingga 11.00", saya harus memastikan untuk memeriksa tempat dari 11:00:01 hingga 11:59:59, karena jika tidak, janji temu pada 11:00 akan muncul di hasil.

Di akhir fungsi, jika janji temu ditemukan, saya mengulang hasilnya dan mengembalikan akhir terbaru. Ini adalah awal berikutnya dari loop yang saya sebutkan di atas.

Semoga ini bisa membantu siapa pun. Sekedar info:ape_id adalah ID dari "Appointment Person" yang terhubung dengannya.



  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 – Berbagai Metode untuk Mengetahui Pengguna Saat Ini

  2. apakah ada fungsi mysql untuk memecahkan kode entitas html?

  3. Pelajari cara mengimpor data Excel ke database MySQL

  4. MySql memperbarui dua tabel sekaligus

  5. Pelanggaran batasan integritas:1452 Tidak dapat menambah atau memperbarui baris anak: