Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос с выводом отсортированного списка возможных комбинаций / 4 сообщений из 4, страница 1 из 1
07.12.2017, 05:35
    #39565508
dmake
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос с выводом отсортированного списка возможных комбинаций
Добрый день, уважаемые форумчане!
Есть таблица вида:
Москва - Тверь - 10000
Москва - Питер - 20000
Питер - Тверь - 5000
Саратов - Барнаул - 5000
и так далее.
Количество записей более 1000, а количество городов более 300.
Не могу составить запрос, который бы создавал выборку где присутствуют только введеные нами города, при этом выводилась бы только одна запись, самая низкая по третьему столбцу (цена).
Например при запросе этой команды с городами Москва, Питер, мы бы получили только 2 записи:
Москва - Питер - (самая низкая цена)
Питер - Москва - (самая низкая цена)
А при запросе четырех городов мы бы получали <16 записей (возможные комбинации), где опять же город А - город Б может иметь только одну запись.
Заранее спасибо!
...
Рейтинг: 0 / 0
07.12.2017, 11:43
    #39565687
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос с выводом отсортированного списка возможных комбинаций
dmakeЕсть таблица вида:Как обеспечивается уникальность для пары городов? т.е. то, что для пары Город1-Город2 отсутствует ещё одна запись с той же парой городов (в том же или обратном порядке) с иной стоимостью?
Если ответ "обеспечивается программно, на клиенте" - значит, не обеспечивается никак, и это надо учитывать при составлении запроса. В том числе и нет гарантии отсутствия записей, где Город1=Город2.

dmakeНапример при запросе этой команды с городами Москва, Питер, мы бы получили только 2 записи:
Москва - Питер - (самая низкая цена)
Питер - Москва - (самая низкая цена)
Откуда вторая запись? её нет в исходных данных.

Решением может быть запрос типа

Код: sql
1.
2.
3.
4.
5.
6.
SELECT town1, town2, MIN(price)
FROM datatable
WHERE town1 IN ('список городов через запятую')
  AND town2 IN ('список городов через запятую')
/* AND town1 != town2 */
GROUP BY LEAST(town1, town2), GREATEST(town1, town2)
...
Рейтинг: 0 / 0
07.12.2017, 12:50
    #39565769
dmake
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос с выводом отсортированного списка возможных комбинаций
AkinadmakeЕсть таблица вида:Как обеспечивается уникальность для пары городов? т.е. то, что для пары Город1-Город2 отсутствует ещё одна запись с той же парой городов (в том же или обратном порядке) с иной стоимостью?
Если ответ "обеспечивается программно, на клиенте" - значит, не обеспечивается никак, и это надо учитывать при составлении запроса. В том числе и нет гарантии отсутствия записей, где Город1=Город2.

dmakeНапример при запросе этой команды с городами Москва, Питер, мы бы получили только 2 записи:
Москва - Питер - (самая низкая цена)
Питер - Москва - (самая низкая цена)
Откуда вторая запись? её нет в исходных данных.

Решением может быть запрос типа

Код: sql
1.
2.
3.
4.
5.
6.
SELECT town1, town2, MIN(price)
FROM datatable
WHERE town1 IN ('список городов через запятую')
  AND town2 IN ('список городов через запятую')
/* AND town1 != town2 */
GROUP BY LEAST(town1, town2), GREATEST(town1, town2)



Уникальность обеспечивается id строки.
Это логистическая база. Город из, Город в, и стоимость за тонну (у каждого города свой id, здесь названия для простоты).
Моя задача стоит в получении всех возможных комбинаций из заданных мной городов (их будет 8-10 штук).
Если попытаться выразить необходимую мне выборку алгоритмом, то получится примерно следующее (допустим у нас города от 1 до 5):
1. Выбрать все записи, где де в ячейке town1 содержатся значение 1 или 2 или 3 или 4 или 5.
2. Из результата 1. выбрать все записи, где в ячейке town2 содержатся значение 1 или 2 или 3 или 4 или 5.
3. При условии совпадения масок town1 и town2 выбирается самое дешевое из них. (например если несколько записей из города 1 в город 3)

Максимальное количество записей в выдаче при 5 городах составит 25.

Надеюсь более понятно изъяснился. Спасибо в любом случае за комментарий, а то я почти сутки этим голову ломаю:).
...
Рейтинг: 0 / 0
07.12.2017, 19:35
    #39566195
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос с выводом отсортированного списка возможных комбинаций
dmakeУникальность обеспечивается id строки.Иными словами, Вы в принципе не поняли, что я ответил... жаль.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос с выводом отсортированного списка возможных комбинаций / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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