SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 06.04.2012 01:36:14

nekulin
Завсегдатай
Зарегистрирован: 06.04.2012
Сообщений: 56

Вывести города где есть экскурсии и вывести 5

Всем привет, для меня стало задачей. Как в 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 ?

Неактивен

 

#2 06.04.2012 01:39:35

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Вывести города где есть экскурсии и вывести 5

Так что вывести нужно города или экскурсии? Если экскурсии, то какие произвольные 5 или принадлежащие одному городу или ...?

Неактивен

 

#3 06.04.2012 01:39:59

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Вывести города где есть экскурсии и вывести 5

Не совсем понятен критерий, по которому нужно выбрать 5 экскурсий. Они должны быть из одного города? Или все из разных городов? Или по пять штук из каждого города? Формализуйте.

Кстати, Вы указали два первого пункта wink. Может быть второй первый все же второй?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#4 06.04.2012 18:35:17

nekulin
Завсегдатай
Зарегистрирован: 06.04.2012
Сообщений: 56

Re: Вывести города где есть экскурсии и вывести 5

vasya написал:

Так что вывести нужно города или экскурсии? Если экскурсии, то какие произвольные 5 или принадлежащие одному городу или ...?

Нужно вывести города и их экскурсий (при том экскурсий должно быть только 5)

Неактивен

 

#5 06.04.2012 18:37:20

nekulin
Завсегдатай
Зарегистрирован: 06.04.2012
Сообщений: 56

Re: Вывести города где есть экскурсии и вывести 5

deadka написал:

Не совсем понятен критерий, по которому нужно выбрать 5 экскурсий. Они должны быть из одного города? Или все из разных городов? Или по пять штук из каждого города? Формализуйте.

Кстати, Вы указали два первого пункта wink. Может быть второй первый все же второй?

Нужно вывести города и их экскурсий (при том экскурсий должно быть только 5)

Неактивен

 

#6 06.04.2012 18:49:25

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Вывести города где есть экскурсии и вывести 5

Пример желаемого результата приведите, а то по прежнему ничего не ясно.

Неактивен

 

#7 06.04.2012 19:14:20

nekulin
Завсегдатай
Зарегистрирован: 06.04.2012
Сообщений: 56

Re: Вывести города где есть экскурсии и вывести 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

Неактивен

 

#8 06.04.2012 19:28:52

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Вывести города где есть экскурсии и вывести 5

Фраза "вывести все города принадлежащие этому городу" взрывает мой мозг. Какой ответ должен быть для приведенных данных? И какой ответ будет если есть ещё город №20 с десятком экскурсий?

Неактивен

 

#9 06.04.2012 19:41:23

nekulin
Завсегдатай
Зарегистрирован: 06.04.2012
Сообщений: 56

Re: Вывести города где есть экскурсии и вывести 5

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"

Неактивен

 

#10 06.04.2012 19:57:21

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Вывести города где есть экскурсии и вывести 5

Т.е. вывести для каждого города не более 5 произвольных экскурсий?

http://sqlinfo.ru/forum/viewtopic.php?id=1742 (читать тему до конца, чтобы понять почему не стоит решать задачу в один запрос, а нужно делать цикл)

Неактивен

 

#11 06.04.2012 20:11:15

nekulin
Завсегдатай
Зарегистрирован: 06.04.2012
Сообщений: 56

Re: Вывести города где есть экскурсии и вывести 5

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

Неактивен

 

#12 06.04.2012 22:58:58

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Вывести города где есть экскурсии и вывести 5

nekulin написал:

да, тоесть  лучше сначала выбрать все города где есть экскурсии а потом сделать делать запросы в цикле ?

Да, это самый лучший способ.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson