sql >> Database >  >> RDS >> Mysql

Gratis tijdblokken vinden in mysql en php?

Probeer deze zoekopdracht

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

Dit zal deze resultaten tonen

+---------------------------------------------+
¦ 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)    |
+--------------------+------------------------+ 

Je moet ook de 21:00:00 in de tabel hebben, anders krijg je het laatste tijdsverschil niet. ik heb 21:00:00 ingevoerd als start- en einddatum in de tabel.

BEWERKT

Dit is een aangepaste zoekopdracht

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)      

En het resultaat is

+--------------------------------------------------------+
¦ 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     |
+----------------------+---------------------------------+  

De punten die u kunt leren van deze zoekopdracht zijn

  1. Gebruik van Timediff-functie. timediff('eindtijd','starttijd')
  2. Deelnemen met het hoogste nummer
  3. Vermijd eerste record in join met een lange offset en limiet vanaf 1 in plaats van nul
  4. IFNULL gebruik ifnull('if here comes null','select this then')


  1. Tips voor het leveren van MySQL-databaseprestaties - deel één

  2. Het bereiken van MySQL-failover en failback op Google Cloud Platform (GCP)

  3. Is het nodig om DbCommand na gebruik weg te gooien?

  4. SQL-syntaxisterm voor 'WHERE (col1, col2) <(val1, val2)'