Задавайте вопросы, мы ответим
Вы не зашли.
Всем привет, для меня стало задачей. Как в 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 написал:
да, тоесть лучше сначала выбрать все города где есть экскурсии а потом сделать делать запросы в цикле ?
Да, это самый лучший способ.
Неактивен