sql >> Databasteknik >  >> RDS >> Mysql

MySQL öppettider

Om du inte kan ändra tabellen kan du använda den här frågan:

SELECT COUNT(*) 
FROM opening_hrs
WHERE (((100*HOUR(NOW())+MINUTE(NOW()) >= openTime) 
        AND (100*HOUR(NOW())+MINUTE(NOW()) <= closeTime + 2400*(closeDay-openDay)))
       OR 
       ((100*HOUR(NOW())+MINUTE(NOW()) >= openTime - 2400*(closeDay-openDay)) 
        AND (100*HOUR(NOW())+MINUTE(NOW()) <= closeTime )))
AND openDay = 1

Om du kan ändra tabellen så att den ser ut så här:

+---------+----------+-----------+
|     day | openTime | closeTime |
+---------+----------+-----------+
|       0 | 1800     |  2400     |
|       1 | 1800     |  2400     |
|       2 | 1800     |  2400     |
|       3 | 1800     |  2400     |
|       4 | 1800     |  2400     |
|       5 | 1800     |  2400     |
|       6 | 1800     |  2400     |
|       0 |    0     |   400     |
|       1 |    0     |   400     |
|       2 |    0     |   400     |
|       3 |    0     |   400     |
|       4 |    0     |   400     |
|       5 |    0     |   400     |
|       6 |    0     |   400     |
+---------+----------+-----------+

då kan du utföra frågan så här:

SELECT COUNT(*) 
FROM opening_hrs
WHERE (100*HOUR(NOW())+MINUTE(NOW()) >= openTime) 
AND (100*HOUR(NOW())+MINUTE(NOW()) <= closeTime)
AND day = 1

Observera att det inte längre finns någon openDay och closeDay; bara en day kolumn. Notera också att openTime är alltid mindre än closeTime , så ojämlikheterna i frågan kan fungera.



  1. Ansluta en 64-bitars applikation till Acomba

  2. Oracle SQL:Använd sekvens i infogning med Select Statement

  3. Om man ska använda SET NAMES

  4. php kör en gång och infoga två gånger i mysql-databasen