Используйте 24-часовое время, чтобы обойти проблему следующим образом:
$time = 1400;
$current_time = (int) date('Hi');
if($current_time < $time) {
// do stuff
}
Таким образом, 2 часа дня равно 14:00 в 24-часовое время. Если мы удалим двоеточие из времени, то мы можем оценить его как целое число в нашем сравнении.
Для получения дополнительной информации о функции даты, пожалуйста, см. Руководство по PHP . Я использовал следующие форматеры времени:
H = 24-часовой формат часа (от 00 до 23)
i = минуты с ведущими нулями (от 00 до 59)
Зависит от того, что вы подразумеваете под "следующим идентификатором" и как он генерируется.
Если вы используете последовательность или идентификатор в базе данных для создания идентификатора, возможно, что " next id "не 3 или 4, а 6 в случае, который вы представили. У вас нет возможности узнать, были ли впоследствии удалены значения с id 3 или 4. Последовательности и идентичности не обязательно пытаются восполнить пробелы; когда они ушли, вы не используете их повторно.
Итак, правильнее всего будет создать столбец последовательности или идентификатора в базе данных, который автоматически увеличивается при выполнении INSERT, а затем SELECT сгенерированное значение.
Я назвал вашу таблицу неиспользуемый
.
SELECT id
FROM (
SELECT 1 AS id
) q1
WHERE NOT EXISTS
(
SELECT 1
FROM unused
WHERE id = 1
)
UNION ALL
SELECT *
FROM (
SELECT id + 1
FROM unused t
WHERE NOT EXISTS
(
SELECT 1
FROM unused ti
WHERE ti.id = t.id + 1
)
ORDER BY
id
LIMIT 1
) q2
ORDER BY
id
LIMIT 1
Этот запрос состоит из двух частей.
Первая часть:
SELECT *
FROM (
SELECT 1 AS id
) q
WHERE NOT EXISTS
(
SELECT 1
FROM unused
WHERE id = 1
)
выбирает 1
, если в таблице нет записи с этим идентификатором
.
Вторая часть:
SELECT *
FROM (
SELECT id + 1
FROM unused t
WHERE NOT EXISTS
(
SELECT 1
FROM unused ti
WHERE ti.id = t.id + 1
)
ORDER BY
id
LIMIT 1
) q2
выбирает первый id
в таблице, для которой нет следующего id
.
Результирующий запрос выбирает наименьшее этих двух значений.
можно ли иметь таблицу утилит? в таком случае я бы создал такую таблицу:
CREATE TABLE number_helper (
n INT NOT NULL
,PRIMARY KEY(n)
);
Заполните ее всеми положительными 32-битными целыми числами (при условии, что идентификатор, который вам нужно сгенерировать, является положительным 32-битным целым числом)
Затем вы можете выбрать так:
SELECT MIN(h.n) as nextID
FROM my_table t
LEFT JOIN number_helper h ON h.n = t.ID
WHERE t.ID IS NULL
Haven На самом деле не тестировал это, но он должен работать.