![]() |
Задавайте вопросы, мы ответим
Вы не зашли.
Всем привет, для меня стало задачей. Как в 1 запрос все сделать, а не в цикле обращаться к таблице экскурсий чтоб вывести только 5 записей.
Задачи
1) Вывести только 5 экскурсий из базы и не больше
Есть таблица связей с экскурсиями и городами
CREATE TABLE IF NOT EXISTS `city_excursion` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`city_id` bigint(20) NOT NULL COMMENT 'Город',
`excursion_id` bigint(20) NOT NULL COMMENT 'Экскурсия',
PRIMARY KEY (`id`),
KEY `excursion_id_idx` (`excursion_id`),
KEY `city_id_idx` (`city_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ;
Тут сложность как вывести именно только 5 экскурсий.
1) Нам нужно выбрать все города где есть экскурсии, тту нет проблем как раз из этой таблицы можно брать
SELECT * FROM city_excursion
если указать limit то он выберет только первые 5 записей а нужно пройтись по всем городам и + вывести 5 экскурсий по этому городу. Помогите плз мб через Union ?
Неактивен
Так что вывести нужно города или экскурсии? Если экскурсии, то какие произвольные 5 или принадлежащие одному городу или ...?
Неактивен
Не совсем понятен критерий, по которому нужно выбрать 5 экскурсий. Они должны быть из одного города? Или все из разных городов? Или по пять штук из каждого города? Формализуйте.
Кстати, Вы указали два первого пункта . Может быть второй первый все же второй?
Неактивен
vasya написал:
Так что вывести нужно города или экскурсии? Если экскурсии, то какие произвольные 5 или принадлежащие одному городу или ...?
Нужно вывести города и их экскурсий (при том экскурсий должно быть только 5)
Неактивен
deadka написал:
Не совсем понятен критерий, по которому нужно выбрать 5 экскурсий. Они должны быть из одного города? Или все из разных городов? Или по пять штук из каждого города? Формализуйте.
Кстати, Вы указали два первого пункта. Может быть второй первый все же второй?
Нужно вывести города и их экскурсий (при том экскурсий должно быть только 5)
Неактивен
Пример желаемого результата приведите, а то по прежнему ничего не ясно.
Неактивен
vasya написал:
Пример желаемого результата приведите, а то по прежнему ничего не ясно.
Есть записи из таблицы
id city_id Город excursion_id Экскурсия
3 1 [->] 1 [->]
4 2 [->] 2 [->]
5 1 [->] 2 [->]
7 1 [->] 3 [->]
8 4 [->] 3 [->]
9 1 [->] 5 [->]
10 1 [->] 4 [->]
11 1 [->] 6 [->]
Видно что у города с id 1 - 6 экскурсий (1 2 3 5 4 6).
Задача:
Вывести все города и экскурсии принадлежащий этому городу, но количество выводимых экскурсий не должно быть больше 5
Неактивен
Фраза "вывести все города принадлежащие этому городу" взрывает мой мозг. Какой ответ должен быть для приведенных данных? И какой ответ будет если есть ещё город №20 с десятком экскурсий?
Неактивен
vasya написал:
Фраза "вывести все города принадлежащие этому городу" взрывает мой мозг. Какой ответ должен быть для приведенных данных? И какой ответ будет если есть ещё город №20 с десятком экскурсий?
Подругому.
Есть города (city_id) у городов есть экскурсии. Вывести все города с их экскурсиями
Таблица
Город1 - Экскурсия1
Город1 - Экскурсия2
Город2- Экскурсия2
Город2- Экскурсия1
Город1 - Экскурсия3
Город1 - Экскурсия4
Город1 - Экскурсия5
Город2 - Экскурсия6
Город1 - Экскурсия6
Тут понятно что у города "Город1" есть 6 экскурсий. Нужно их все вывести это просто
SELECT * FROM city
В результате мы получем все записи
Город1 - Экскурсия1
Город1 - Экскурсия2
Город2- Экскурсия2
Город2- Экскурсия1
Город1 - Экскурсия3
Город1 - Экскурсия4
Город1 - Экскурсия5
Город2 - Экскурсия6
Город1 - Экскурсия6
Вприницпе мы вывели у всех городов все их экскурсии. Но не нужно выводить все экскурсии а ограничивается только 5 вот что должно получиться
Город1 - Экскурсия1
Город1 - Экскурсия2
Город2- Экскурсия2
Город2- Экскурсия1
Город1 - Экскурсия3
Город1 - Экскурсия4
Город1 - Экскурсия5
Город2 - Экскурсия6
Строка "Город1 - Экскурсия6" отпала потому что это уже 6 экскурсия принадлежащая городу "Город1"
Неактивен
Т.е. вывести для каждого города не более 5 произвольных экскурсий?
http://sqlinfo.ru/forum/viewtopic.php?id=1742 (читать тему до конца, чтобы понять почему не стоит решать задачу в один запрос, а нужно делать цикл)
Неактивен
vasya написал:
Т.е. вывести для каждого города не более 5 произвольных экскурсий?
http://sqlinfo.ru/forum/viewtopic.php?id=1742 (читать тему до конца, чтобы понять почему не стоит решать задачу в один запрос, а нужно делать цикл)
да, тоесть лучше сначала выбрать все города где есть экскурсии а потом сделать делать запросы в цикле ?
Есть 3 таблицы
City - города
Ex - экскурсии
CityEx - связи
Приходимся по всей таблице CityEx в цикле делаем запрос
SELECT * FROM CityEx WHERE city_id=ce.city_id and NOT id=ex.id LIMIT 4
Неактивен
nekulin написал:
да, тоесть лучше сначала выбрать все города где есть экскурсии а потом сделать делать запросы в цикле ?
Да, это самый лучший способ.
Неактивен