Mysql
 sql >> Base de données >  >> RDS >> Mysql

Trouvez la prochaine fois que l'entreprise est ouverte ; calcul des heures mysql

Pour connaître le shop_id, qui est ouvert pour NOW()

SELECT *
  FROM `shop_hours`
 WHERE `day_of_week` = DATE_FORMAT(NOW(), '%w')
   AND CURTIME() BETWEEN `open_time` AND `close_time`

Obsolète :

Pour trouver demain est disponible open_time s :

SELECT *
  FROM `shop_hours`
 WHERE `day_of_week` = DATE_FORMAT(DATE_ADD(NOW(), INTERVAL 1 DAY), '%w')

Modifier 2 :

Pour trouver le prochain open_time disponible s :

  SELECT `shop_id`,
         MIN(CAST(CONCAT(DATE(DATE_ADD(NOW(), INTERVAL ((7 + DATE_FORMAT(NOW(), '%w') - `day_of_week`) % 7) DAY)), ' ', `open_time`) AS DATETIME)) AS `next_open_datetime`
    FROM `shop_hours`
GROUP BY `shop_id`

Modifier :

DATE_FORMAT(*DATE*, '%w') utilise le format 0 = Sunday ... 6 = Saturday

Si vous souhaitez utiliser le format ISO 1 = Monday ... 7 = Sunday dans votre day_of_week champ, vous devez lier le date('N') de php à votre requête (ou utilisez la fonction if de Mysql IF(DATE_FORMAT(NOW(), '%w') = 0, 7, DATE_FORMAT(NOW(), '%w')) , mais c'est moche)