Задавайте вопросы, мы ответим
Вы не зашли.
Добрый день.
Есть 4 таблицы, 3 - это название организаций, а четвертая это таблица юзров. В первых трех таблицах перечислены организации в порядке подчиненности, т.е. в первой главные, во второй подчиненные главным, а в третьей подчиненные второй. Соответственно, подчиненность второй к первой и третьей ко второй записана в определенном поле идентификатором строк в вышестоящих организациях. Теперь вопрос, как мне сделать отбор юзера если в таблеце юзеров в поле номер организации стоит идентификатор строки и идентификатор таблицы, в которой эта строка есть? т.е. например "Сидоров, 3, 2" - 3 это строка, а 2 это таблица. Я так думаю, что нужно будет делать двумя запросами, но может есть вариант поэлегантней?
Неактивен
Кажется, не очень удачный способ хранения информации
Если хочется одним запросом, то
SELECT ... , 1 FROM table1
UNION
SELECT ... , 2 FROM table2
UNION
SELECT ... , 3 FROM table3
выбирает данные из всех таблиц + проставляет нужное число в выборку, поэтому можно сделать
SELECT * FROM
(вот этот длинный запрос с union) t
JOIN users ON ...
Но, кажется, оно того не стоит. Будет тормозить. Кстати, если объединить первые три таблицы в одну (вот с таким вот
ключом), то тормозить будет гораздо меньше, особенно при наличии ключиков.
Неактивен
paulus написал:
Кажется, не очень удачный способ хранения информации
может тогда подскажете более распространенную структуру таблиц, что бы велосипед не изобретать? просто если делать все в одной таблице, то наименования 2 верхних организаций будут постоянно дублироваться - это же не хорошо. просто у меня мысле нет как это систематизировать.
Неактивен
Про «наименование двух верхних организаций» не понял. Я как раз за одну таблицу
Неактивен
paulus написал:
Про «наименование двух верхних организаций» не понял. Я как раз за одну таблицу
3 таблицы организаций - это иерархия, первая - главная организация, вторая - допустим десяток второстепенных, третья - сотня второстепенных вторых организаций.
например:
1 - Головной офис
2 - Доплнительный офис № 1, Дополнительный офис № 2, Дополнительный офис № 3
3 - Филиал № 15 Дополнительного офиса № 1 ....
Как это все разместить в одной таблице если будет такое количество дублирующихся данных?
Неактивен
Ну и чем плохо решение «в лоб»?
id | parent_id | name ------------------------ 1 | 0 | Головной офис 2 | 1 | ДО 1
Неактивен