• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Запрос Ms Access -> Mysql

  • Автор темы Azrael
  • Дата начала
A

Azrael

Сорри за корявый сабж. Сделал в MS Access запрос:
Код:
SELECT Stations.Name, Trains.Nomer
FROM `Trains` INNER JOIN (`Stations` INNER JOIN `TrainStops` ON Stations.id=TrainStops.station_id) ON Trains.id=TrainStops.train_id
WHERE (Stations.id=2) AND (Fix(Now()-(Trains.StartDate+Stations.TimeFromBeg/24)) Mod Trains.Interval= 0) AND (EXISTS(SELECT * FROM `TrainStops` WHERE (station_id=1) AND (train_id=Trains.id)));
В базе mySQL тип StartDate - DateTime, TimeFromBeg - float
Нужно сделать запрос к MySQL, в связи с чем имею следующие проблемы:
а) mySQL не понимает Fix и Int
пытался фиксить функциями Floor, Ceiling - c датами эти функции, похоже, в отличии от access'овских аналогов, не работают, по крайней мере, в phpMyAdmin-е они выводят набор цифр, похожий на дату, но без разделителей.
б) как мне в дальнейшем вместо Now() подставлять любую дату.
 
A

Azrael

Кажется, разрешилось: конечный вариант выглядет примерно так:
Код:
SELECT Stations.Name, Trains.Nomer
FROM `Trains` INNER JOIN (`Stations` INNER JOIN `TrainStops` AS TS ON Stations.id=TS.station_id) ON Trains.id=TS.train_id
WHERE (Stations.id=2) AND ((TO_DAYS('2007-12-25')-TO_DAYS(Trains.StartDate)+ceiling(TS.TimeFromBeg/24)) Mod Trains.Interval = 0) AND (EXISTS(SELECT * FROM `TrainStops` AS TS1 WHERE (station_id=1) AND (train_id=Trains.id) AND (TS.id<TS1.id)));
Т.е. с использованием функции TO_DAYS(), вдруг кому поможет.
 
A

Azrael

Для: sax_ol
Потом, может быть, займусь тестированием (при наличии времени и желания), а пока нужно поскорее доделать и отдать :(
Да, ещё (а ну как кому пригодится), чтобы в mySQL выбрать вот такое: Fix(Now()-(Trains.StartDate+Stations.TimeFromBeg/24) приходится извращаться как-то вот так:
Код:
SELECT "2007-12-25 21:40:00" + INTERVAL FLOOR(12.5) HOUR + INTERVAL ((12.5 - FLOOR(12.5))*60) MINUTE
 
A

Azrael

Для: sax_ol
Так записи
Код:
SELECT "2007-12-25 21:40:00" + INTERVAL 1 HOUR
и
Код:
SELECT DATE_ADD("2007-12-25 21:40:00", INTERVAL 1 HOUR);
равнозначны... просто в акцессе всё проще было, а пока разобрался как в майскуле сделать...
пытался искать по форуму, не нашел (может, плохо искал :( ) вот и публикую, вдруг, кому поможет...
Ещё, в тему, неплохое руководство в инете нашел _http://adm.jinr.ru/doc/MySQL/manual.ru_Reference.html
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!