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

Menemukan blok waktu gratis di mysql dan php?

Coba kueri ini

SELECT
  a.id,
  a.start_hour,
  a.end_hour,
  TIMEDIFF(la.start_hour, a.end_hour) as `Free Time`
FROM appointment as a
  LEFT JOIN(SELECT * FROM appointment LIMIT 1,18446744073709551615) AS la
    ON la.id = a.id + 1
  LEFT JOIN (SELECT * FROM appointment) AS ra ON a.id = ra.id

Ini akan menampilkan hasil ini

+---------------------------------------------+
¦ id ¦ start_hour BY ¦ end_hour   | Free Time |
¦----+---------------¦------------------------|
¦  1 ¦   08:00:00    ¦  08:15:00  | 05:45:00  |
¦  2 ¦   14:00:00    ¦  14:30:00  | 02:30:00  |
¦  3 ¦   17:00:00    ¦  17:45:00  | 03:15:00  |
¦  4 ¦   21:00:00    ¦  21:00:00  | (NULL)    |
+--------------------+------------------------+ 

Anda juga harus memiliki 21:00:00 di tabel atau Anda tidak akan bisa mendapatkan perbedaan waktu terakhir. saya memasukkan 21:00:00 sebagai tanggal mulai dan berakhir di tabel.

DIEDIT

Ini adalah kueri yang dimodifikasi

SELECT
  a.id,
  a.end_hour AS `Free time Start`,
  IFNULL(la.start_hour,a.end_hour) AS `Free Time End`,
  IFNULL(TIMEDIFF(la.start_hour, a.end_hour),'00:00:00') AS `Total Free Time`
FROM appointment AS a
  LEFT JOIN (SELECT * FROM appointment LIMIT 1,18446744073709551615) AS la
    ON la.id = (SELECT MIN(id) FROM appointment where id > a.id LIMIT 1)      

Dan hasilnya adalah

+--------------------------------------------------------+
¦ id ¦ Free time Start ¦ Free Time End | Total Free Time |
¦----+-----------------¦---------------------------------|
¦  1 ¦   08:15:00      ¦ 14:00:00      |    05:45:00     |
¦  2 ¦   14:30:00      ¦ 17:00:00      |    02:30:00     |
¦  3 ¦   17:45:00      ¦ 21:00:00      |    03:15:00     |
¦  4 ¦   21:00:00      ¦ 21:00:00      |    00:00:00     |
+----------------------+---------------------------------+  

Poin yang dapat dipelajari dari kueri ini adalah

  1. Penggunaan fungsi Timediff. timediff('waktu selesai','waktu mulai')
  2. Bergabung dengan nomor atas
  3. Hindari record pertama dalam join dengan offset panjang dan limit mulai dari 1 bukan nol
  4. IFNULL penggunaan ifnull('if here come null','pilih ini maka')


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLSTATE[HY093] :pernyataan pdo saat dimasukkan ke mysql db

  2. bagaimana menemukan dan mengganti kata di kolom mysql?

  3. Menu multi level dengan PHP/MySQL

  4. JSON_SET() – Masukkan atau Perbarui Nilai dalam Dokumen JSON di MySQL

  5. Ubah karakter latin1 pada tabel UTF8 menjadi UTF8