У меня есть таблица SQL:
+----+-----+-------+-------+
| id | reg | in | out |
+----+-----+-------+-------+
| 1 | a | 11:10 | |
| 2 | a | | 11:30 |
| 3 | b | 06:10 | |
| 4 | c | | 07:10 |
+----+-----+-------+-------+
У меня есть сортировка по массиву, так что он будет совпадать, если reg то же самое и в перед раньше, так, например:
array(
[0]=> array('reg'=>'a','in'=>'11:10','out'=>'11:30'),
[1]=> array('reg'=>'b','in'=>'06:10','out'=>''),
[2]=> array('reg'=>'c','in'=>'','out'=>'07:10')
)
Затем мне нужно преобразовать этот массив так, чтобы он располагался в порядке времени, но там, где есть время входа и выхода, используется только время ожидания. Так что, если бы это было отсортировано, это было бы:
array(
[0]=> array('reg'=>'b','in'=>'06:10','out'=>''),
[1]=> array('reg'=>'c','in'=>'','out'=>'07:10'),
[2]=> array('reg'=>'a','in'=>'11:10','out'=>'11:30')
)
Я надеюсь, что это имеет смысл, у меня есть около 200 заявок в день, и я провел все свои выходные, пытаясь заказать его, но, кажется, всегда есть шальные.
Времена будут меткой времени Unix. Я просто поместил ее в H: я здесь, поскольку SQL будет сортировать WHERE> midnight и < 00:01 этим утром, показывая только текущий день.
Наверное, на меня пялилось что-то действительно простое и очевидное, но я этого не вижу.
Я бы сделал это в SQL, пока вы запрашиваете данные, предполагая, что out
дата позже чем in
Дата:
select reg, max(`in`) as maxin, max(`out`) as maxout from table
group by reg
order by greatest(maxin,ifnull(maxout,0))
Вы можете создать значение сортировки с IF()
:
SELECT `reg`,`in`,`out`, IF(`out`='00:00:00', `in`,`out`) AS sortfield
FROM `test`
ORDER BY sortfield
Это предполагает, что ваш in
а также out
поля имеют тип TIME
, Это проверяет, если out
это имеет значение00:00:00
, который является значением по умолчанию, когда он пуст. Если да, то значение сортировки получит значение из in
иначе получится out
так что он всегда заселен.
Конечно, регистрация или выезд ровно в 00:00:00 были бы проблемой, поэтому было бы лучше сделать поле NULL
если он пуст и проверьте это.
Для долгосрочной регистрации типа DATETIME
будет лучшим вариантом.