SELECT * FROM courses WHERE DATE_ADD(NOW(), INTERVAL 2 HOUR) > start_time
См. Функции Даты и времени для другого управления датой/временем.
Думаю, вы ищете функцию FIELD - хотя обычно ее считают строковой функцией, она также отлично работает для чисел!
ORDER BY FIELD(field_name, 3,2,5,7,8,1)
Вы можете использовать FIELD ()
:
ORDER BY FIELD(id, 3,2,5,7,8,1)
Возвращает индекс (позицию) str в списке str1, str2, str3, ... Если str не найдена, возвращает 0.
Это некрасивый хакер, поэтому на самом деле используйте его, только если у вас нет другого выбора. Сортировка вывода в вашем приложении может быть лучше.
Вам просто нужно указать правильный порядок по оператору.
SELECT ID FROM myTable WHERE ID IN(1,2,3,4) ORDER BY ID
Почему вы хотите, чтобы ваши данные упорядочивались неупорядоченными, как в вашем примере?
Если вы не против объединяя длинные запросы, попробуйте следующий способ:
SELECT ID FROM myTable WHERE ID=1
UNION
SELECT ID FROM myTable WHERE ID=3
UNION
SELECT ID FROM myTable WHERE ID=2
Стандартный SQL не предоставляет способа сделать это (MySQL может, но я предпочитаю решения, которые не зависят от поставщика, поэтому я могу переключить СУБД в любое время).
Это кое-что. вы должны выполнить постобработку после того, как будет возвращен набор результатов. SQL может возвращать их только в порядке, указанном в предложении «порядок по» (или в любом порядке, если такого предложения нет).
Другая возможность (хотя мне это не нравится, я Имею честь предоставить вам выбор) состоит в том, чтобы сделать несколько обращений к базе данных, по одному для каждого идентификатора, и обрабатывать их по мере поступления:
select * from tbl where article_id = 4;
// Process those.
select * from tbl where article_id = 7;
// Process those.
: : : : :
select * from tbl where article_id = 9;
// Process those.