Запрос Ms Access -> Mysql

Тема в разделе "SQL", создана пользователем Azrael, 24 дек 2007.

  1. Azrael

    Azrael Гость

    Сорри за корявый сабж. Сделал в MS Access запрос:
    Код (Text):
    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() подставлять любую дату.
     
  2. Azrael

    Azrael Гость

    Кажется, разрешилось: конечный вариант выглядет примерно так:
    Код (Text):
    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(), вдруг кому поможет.
     
  3. Azrael

    Azrael Гость

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

    Azrael Гость

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

Поделиться этой страницей