powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Pls помогите с составлением условия WHERE
7 сообщений из 7, страница 1 из 1
Pls помогите с составлением условия WHERE
    #35478853
Evil1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ, помогите плиз с решением.
Есть 2 таблицы 1 мастер, вторая детей.
Таблица по авиабилетам. Детэйл по купонам.
1 купон это 1 участок маршрута (1 запись в базе detail)
Например если по билету маршрут Москва-Киев-Астрахань-Киев-Москва, то соответственно выходит, 1-й купон Москва-Киев, 2-й Киев-Астрахань, 3-й Астрахань-Киев и т.п.

структура детэйл таблицы примерно такая:

ID from to ticketID coupon_num
1 Москва Киев 1 1
2 Киев Москва 1 1
Вопрос следующий мне необходимо выбрать из базы все билеты, с началом маршрута например из Москвы (тут всё просто WHERE from='Москва' and coupon_num=1), через, предположим Киев, и заканчивающийся в Новосибирске например.

Подскажите как составить условие. которую неделю уже ломаю голову, ничего придумать не могу.
Пока решение такое, что я делаю SELECT всех билетов, потом в цикле их обхожу, и для каждого ID билета вытаскиваю из detail таблицы маршрут, соединяю его в одну строку (Москва-Киев-Астрахань-Киев-Москва) и потом проверяю процедурами по работе со строками, условия типа если в строке есть москва на позиции 1, потом Киев в любой позиции и т.п.
Но такой метод работает очень долго.... примерно из 50 тысяч записей, полезными в итоге выходят примерно 100.
Нужно позарез сделать условие, средствами самой базы.
Всем заранее спасибо!
...
Рейтинг: 0 / 0
Pls помогите с составлением условия WHERE
    #35479044
Dmitry..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. начальный пункт ты уже составил

2. конечный пункт: было-бы неплохо хранить колво пунктов в мастер таблице для каждого билета. тогда эта задача сводится к первой
Код: plaintext
WHERE to='Москва' and DETAIL.coupon_num=MASTER.coupon_count

3. через: подзапрос типа:
Код: plaintext
1.
2.
3.
4.
5.
select * from MASTER where ... and exists(
   select  1  
   from DETAIL 
   where DETAIL.MASTER_ID=MASTER.MASTER_ID 
   and (from='Киев' or to ='Киев') 
)

конечно OR особенно в подзапросе будет отрабатывать медлено
...
Рейтинг: 0 / 0
Pls помогите с составлением условия WHERE
    #35479093
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если действительно добавить в master количество купонов (хотя бы как вычислимое поле), то можно так.
Код: plaintext
1.
2.
3.
4.
select master.*
from master
       join detail as middle_stop on master.ticketId=middle_stop.ticketId and master.coupon_count>middle_stop.coupon_num
       join detail as last_coupon on master.ticketId=last_coupon.ticketId and master.coupon_count=last_coupon.coupon_num
where master.from='Moscow' and middle_stop.to='Kiev' and last_coupon.to='Novosibirsk'
...
Рейтинг: 0 / 0
Pls помогите с составлением условия WHERE
    #35480051
Evil1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, буду пробовать.

Задача усложняется :-)
Ещё необходимо после всего этого сгруппировать их по полному маршруту, и соответственно посчитать стоимсоть.
...
Рейтинг: 0 / 0
Pls помогите с составлением условия WHERE
    #35480055
Evil1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В билете идет максимально 4 купона.
Города кодируются по кодировке IATA 3-х буквенными кодами
соответсвенно по полному билету марушрут будет 15 символов (ALA-MOW-TSE-DME).
Наверное, самый логичный вариант будет, в мастер-таблице создать поле полного маршрута, STING (15), и по нему уже делать СТРИНГОВУЮ ВЫБОРКУ.
на мой взгляд это самое оптимальное решенеи, в плане быстродействия запроса.
...
Рейтинг: 0 / 0
Pls помогите с составлением условия WHERE
    #35480088
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да. в таком случае это наиболее очевидный подход.
и можно использовать оператор LIKE для поиска.

еще-бы выяснить вероятность увеличения кол-ва купонов в ближайшие лет 5... :)
...
Рейтинг: 0 / 0
Pls помогите с составлением условия WHERE
    #35484408
Evil1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Последние лет 25 не изменялось :-)
Логично предположить, что и не будет.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Pls помогите с составлением условия WHERE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]