SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 24.05.2009 15:05:27

pixel
Завсегдатай
Зарегистрирован: 16.04.2009
Сообщений: 39

Как мне составить запрос к БД

Добрый день.
Есть 4 таблицы, 3 - это название организаций, а четвертая это таблица юзров. В первых трех таблицах перечислены организации в порядке подчиненности, т.е. в первой главные, во второй подчиненные главным, а в третьей подчиненные второй. Соответственно, подчиненность второй к первой и третьей ко второй записана в определенном поле идентификатором строк в вышестоящих организациях. Теперь вопрос, как мне сделать отбор юзера если в таблеце юзеров в поле номер организации стоит идентификатор строки и идентификатор таблицы, в которой эта строка есть? т.е. например "Сидоров, 3, 2" - 3 это строка, а 2 это таблица. Я так думаю, что нужно будет делать двумя запросами, но может есть вариант поэлегантней?

Неактивен

 

#2 25.05.2009 02:26:05

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Как мне составить запрос к БД

Кажется, не очень удачный способ хранения информации sad

Если хочется одним запросом, то
SELECT ... , 1 FROM table1
UNION
SELECT ... , 2 FROM table2
UNION
SELECT ... , 3 FROM table3

выбирает данные из всех таблиц + проставляет нужное число в выборку, поэтому можно сделать
SELECT * FROM
(вот этот длинный запрос с union) t
JOIN users ON ...

Но, кажется, оно того не стоит. Будет тормозить. Кстати, если объединить первые три таблицы в одну (вот с таким вот
ключом), то тормозить будет гораздо меньше, особенно при наличии ключиков.

Неактивен

 

#3 25.05.2009 17:37:44

pixel
Завсегдатай
Зарегистрирован: 16.04.2009
Сообщений: 39

Re: Как мне составить запрос к БД

paulus написал:

Кажется, не очень удачный способ хранения информации sad

может тогда подскажете более распространенную структуру таблиц, что бы велосипед не изобретать? просто если делать все в одной таблице, то наименования 2 верхних организаций будут постоянно дублироваться - это же не хорошо. просто у меня мысле нет как это систематизировать.

Неактивен

 

#4 25.05.2009 20:09:44

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Как мне составить запрос к БД

Про «наименование двух верхних организаций» не понял. Я как раз за одну таблицу smile

Неактивен

 

#5 25.05.2009 20:24:49

pixel
Завсегдатай
Зарегистрирован: 16.04.2009
Сообщений: 39

Re: Как мне составить запрос к БД

paulus написал:

Про «наименование двух верхних организаций» не понял. Я как раз за одну таблицу smile

3 таблицы организаций - это иерархия, первая - главная организация, вторая - допустим десяток второстепенных, третья - сотня второстепенных вторых организаций.
например:
1 - Головной офис
2 - Доплнительный офис № 1, Дополнительный офис № 2, Дополнительный офис № 3
3 - Филиал № 15 Дополнительного офиса № 1 ....
Как это все разместить в одной таблице если будет такое количество дублирующихся данных?

Неактивен

 

#6 25.05.2009 22:45:33

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Как мне составить запрос к БД

Ну и чем плохо решение «в лоб»?

Код:

id | parent_id | name
------------------------
1  | 0         | Головной офис
2  | 1         | ДО 1

Неактивен

 

Board footer

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