Проблема с сравнению по времени с mysql
у меня есть проблема: у меня есть таблица времени доставки, времени для каждого периода Ex.: 14:00 às 22:30
срок 40min
. Я могу поймать это с помощью SELECT
с помощью BETWEEN
.
, Когда приходит срок доставки, как Das 22:00 às 02:00
срок 55min
SELECT
с простого BETWEEN
не решение проблемы.
hora_inicio: 22:00
hora_fim: 02:00
tempo: 00:55
Будем считать, что сейчас 23:00, затем становится 23:00 ENTRE 22:00 E 02:00
, только это не попадает, потому что 02:00
уже день далее, верно?
инструкцию SQL, используемую в 'легко':
SELECT tempo FROM tempo_entrega WHERE id_restaurante = 12 AND CURTIME() BETWEEN hora_inicio AND hora_fim
Следуя логике @JoaoRaposo смотрите:
id_restaurante:12
hora_inicio: 22:00:00
hora_fim: 02:00:00
tempo: 00:40:00
id_restaurante:12
hora_inicio: 02:30:00
hora_fim: 16:30:00
tempo: 00:25:00
Применил следующую инструкцию (мне кажется, я адаптированы правильно в Mysql, у меня нет знаний IF ELSE в SQL:
SELECT tempo FROM tempo_entrega WHERE id_restaurante = 12 AND CURTIME() BETWEEN hora_inicio AND hora_fim OR id_restaurante = 12 AND CURTIME() BETWEEN hora_inicio AND '23:59:59' OR id_restaurante = 12 AND CURTIME() BETWEEN '00:00:00' AND hora_fim
И у меня, как возвращение: tempo: 00:25:00
там, все идеально... masss... сколько я включил "CURTIME ()" "23:30:00" возвращение:
tempo: 00:40:00
tempo: 00:25:00
я Полагаю, что тот факт, я использовал-или он взял из двух способов... но с помощью AND вместо OR не возвращает ни один, ни другой. :(
2 answers
Его структуру таблицы, что сдерживает работы, более правильно, и вы работаете с даты целые и для расчетов, то лучше преобразовать в секунды. пример:
<?php
$agora = date("d-m-Y H:i:s");//EX: 17/02/2014 19:00:24
$agora_em_segundos = strtotime($agora);//EX: 1392660273
// OU
$agora = time();//EX: 1392660273
//Entre dias
$anterior = strtotime('2014-02-16 23:30:00');//EX: 1392589800
$atual = strtotime('2014-02-17 00:25:00');//EX: 1392593100
$calculo = $atual - $anterior;//EX: 3300
$duracao = segundosParaMinutos($calculo); // 55 min
function segundosParaMinutos($seg){
return (int)$seg / 60;
}
, Начиная с этого примера, вы можете изменить свои таблицы, а затем сохранить в полях hora_dia_inicio и hora_dia_fim в считанные секунды.
Мне кажется, что проблема находится в области моделирования таблице. Теоретически это должно быть что-то вроде:
hora_dia_inicio hora_dia_fim tempo_entrega
0 2 55
2 22 40
22 24 55
И тогда запрос будет выглядеть так:
SELECT tempo_entrega
FROM tempo_entrega
WHERE hora BETWEEN hora_dia_inicio < ? AND hora_dia_fim >= ?;