negmat
@negmat

Как составить запрос MySQL?

Доброго всем дня! Начинаю работать с MySQL, возник такой вопрос.

Предположим у меня есть база с овощами (vegetables), они проходят города поставок.
Например:
Картошка едет таким путем - Минск -> Москва -> Пермь -> Тюмень.

Я ищу какие овощи проезжают путь Москва и Тюмень, мне должна показывается Картошка.

В базе есть: начало пути - Москва и конец пути - Тюмень, отрезок - Москва и Пермь это промежуточные точки (их может и не быть).
Так же есть back (название поля) enum значения 1 или 0, 1 - означает что овощ может быть отправлен обратным путем, 0 - не может.

То есть если я буду искать Пермь -> Москва - то картошка все равно покажется, как бы обратным путем. Если было бы back = 0 то нет.
Могут быть и подобные комбинации при которых картошка будет найдена:
Начало - Москва, конец - Пермь,
Начало - Минск, конец - Тюмень,
Начало - Тюмень, конец - Минск (if back == 1)


Как построить запрос для поиска по базе?
Поля:
start - начало пути тип varchar(64)
end - конец пути varchar(64)
gap - промежуточные точки в пути, тип: blob храниться array serilize



Огромное спасибо, кто напишет хотя бы часть запроса, или предоставит какой-то пример.
  • Вопрос задан
  • 128 просмотров
Решения вопроса 1
@Joysi75
Мало входных данных в части хранения SQL.
Если, например, организовать вашу структуру как список таблиц (id - первичные ключи):
vegetables(id, name) овощи. Записи в таблице:(1, 'картофель')
points(id, name) пункты перевозок. Записи в таблице: (1, 'Минск'), (2, 'Москва'), (3, 'Пермь'), (4, 'Тюмень')
deliveries(vegetable, route, name). Записи в таблице: (1, 1, 'Поставка картошки из Белоруссии N 120'). Поля имеют внешние ключи на vegetables и routes
routes (id, StartPoint, StopPoint). Записи в таблице: (1, 1, 4). Поля имеют внешние ключи на points
pathes(route,fromPoint, toPoint). Записи в таблице: (1,1,2) , (1,2,3) (1,3,4). Поля имеют внешние ключи на points и routes.

select  distinct vegetables.name 
  from vegetables, deliveries, routes, pathes
  where 
    deliveries.vegetable = vegetables.id and
    routes.id=deliveries.route and
    pathes.route=deliveries.route and
   exists (
      select * from pathes, points 
         where pathes.route=route.id and 
            from pathes.fromPoint=points.id and points.Name='Москва') and
   exists (
      select * from pathes, points 
         where pathes.route=route.id and 
            from pathes.toPoint=points.id and points.Name='Тюмень')

выдаст овощи, у которых есть поставка, пролегающая через 2 указанных города .

P.S. Естественно добавляются еще доп поля (наличие обратного маршрута и т.п.) . Я просто хотел показать (как пример) - организацию выборки данных и их хранение.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы