|
|
|
| Здравствуйте. Никак не могу разобраться с многотабличным запросом. Есть две таблицы. В первой хранятся данные по организациям, во второй хранятся направления деятельности организаций. Примерно так:
таблица Organizations:
-----------------------------------------------------------------------------------------------------------
orgid | sphere1 | sphere2 | sphere3 | title | desription | address |
-----------------------------------------------------------------------------------------------------------
0 | 0 | 1 | 10 | текст | описание | адрес |
-----------------------------------------------------------------------------------------------------------
1 | 5 | 3 | 8 |qwerty | описание | г.Москва.. |
-----------------------------------------------------------------------------------------------------------
таблица Spheres:
--------------------------------------------
ID | Title |
--------------------------------------------
0 | Клубы |
--------------------------------------------
1 | рестораны |
--------------------------------------------
3 | кинотеатры |
--------------------------------------------
ну и так далее...
в таблице организаций в полях sphere1, sphere2 и sphere3 хранятся идентификаторы сферы деятельности (ID) из таблицы Spheres. А в таблице spheres перечислены идентификаторы сферы и их название. Так вот мне надо вывести на экран таблицу со списком организаций и указанием сферы деятельности... напр.:
=============================================
Клуб QWERTY
Рубрики: клубы, развлекательные центры, рестораны.
=============================================
Зона
Рубрики: клубы.
=============================================
В базе планируется огромное число организаций, поэтому получать сначала Sphere1, Sphere2 и Sphere3 для каждой организации, а затем отсылать по три дополнительных запроса для каждой организации будет расточительно. Поэтому прошу у вас помочь с составлением запроса. Заранее спасибо.
P.S. Прошу прощения, что постоянно заваливаю форум своими вопросами. Просто лучше этого форума я ничего не находил. Огромный всем респект!!!! | |
|
|
|
|
|
|
|
для: kramolnic
(20.07.2006 в 14:10)
| | лучше переделать структуру.
убрать сферы из первой таблицы и создать еще одну таблицу dir с направлениями
id, id_org, id_sphere
в которую добавлять по одной записи для каждого направления деятельности к.-л. организации в к.-л. сфере. | |
|
|
|
|
|
|
|
для: Trianon
(20.07.2006 в 14:20)
| | Разве это будет эффективнее? Мало того, что придется к еще одной таблице обращаться, так еще и проблема не решена: придется все равно получать идентификаторы сфер деятельности для каждой организации по отдельности из таблицы dir, а потом выбирать данные из таблицы spheres... или я не прав и это решение эффективнее??
хотя плюс есть - можно снять ограничение в три сферы и сделать для каждой организации их сколько угодно ... от одной до бесконечности..
Но все равно для меня проблема не решена. Подскажи тогда запрос для того, чтобы можно было с меньшим числом обращений к базе вывести необходимые данные. Вероятно, это можно решить многотабличным запросом? | |
|
|
|
|
|
|
|
для: kramolnic
(20.07.2006 в 16:57)
| | Один запрос:
SELECT Organizations.orgid,
Organizations.title,
GROUP_CONCAT(Spheres.title , SEPARATOR ', ') as rubrics
FROM Organizations
JOIN dir ON dir.id_org = Organizations.orgid
JOIN Spheres ON spheres.id_sphere=Spheres.ID
GROUP BY Organizations.orgid, Organizations.title
|
| |
|
|
|
|
|
|
|
для: Trianon
(20.07.2006 в 17:13)
| | Спасибо за помощь. Обязательно опробую.
А где можно подробнее почитать про подобные запросы? Ничего конкретного найти не смог. В большинстве справочников и мануалов рассмотрены лишь простейшие запросы. | |
|
|
|
|
|
|
|
для: kramolnic
(20.07.2006 в 21:23)
| | гм [url]mysql.org[/url]? | |
|
|
|