Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите с многотабличным запросом
 
 автор: kramolnic   (20.07.2006 в 14:10)   письмо автору
 
 

Здравствуйте. Никак не могу разобраться с многотабличным запросом. Есть две таблицы. В первой хранятся данные по организациям, во второй хранятся направления деятельности организаций. Примерно так:
таблица 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. Прошу прощения, что постоянно заваливаю форум своими вопросами. Просто лучше этого форума я ничего не находил. Огромный всем респект!!!!

   
 
 автор: Trianon   (20.07.2006 в 14:20)   письмо автору
 
   для: kramolnic   (20.07.2006 в 14:10)
 

лучше переделать структуру.
убрать сферы из первой таблицы и создать еще одну таблицу dir с направлениями
id, id_org, id_sphere
в которую добавлять по одной записи для каждого направления деятельности к.-л. организации в к.-л. сфере.

   
 
 автор: kramolnic   (20.07.2006 в 16:57)   письмо автору
 
   для: Trianon   (20.07.2006 в 14:20)
 

Разве это будет эффективнее? Мало того, что придется к еще одной таблице обращаться, так еще и проблема не решена: придется все равно получать идентификаторы сфер деятельности для каждой организации по отдельности из таблицы dir, а потом выбирать данные из таблицы spheres... или я не прав и это решение эффективнее??
хотя плюс есть - можно снять ограничение в три сферы и сделать для каждой организации их сколько угодно ... от одной до бесконечности..
Но все равно для меня проблема не решена. Подскажи тогда запрос для того, чтобы можно было с меньшим числом обращений к базе вывести необходимые данные. Вероятно, это можно решить многотабличным запросом?

   
 
 автор: Trianon   (20.07.2006 в 17:13)   письмо автору
 
   для: 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

   
 
 автор: kramolnic   (20.07.2006 в 21:23)   письмо автору
 
   для: Trianon   (20.07.2006 в 17:13)
 

Спасибо за помощь. Обязательно опробую.
А где можно подробнее почитать про подобные запросы? Ничего конкретного найти не смог. В большинстве справочников и мануалов рассмотрены лишь простейшие запросы.

   
 
 автор: Loki   (20.07.2006 в 22:14)   письмо автору
 
   для: kramolnic   (20.07.2006 в 21:23)
 

гм [url]mysql.org[/url]?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования