|
|
|
| Все данные берутся из базы.
Получаем массив, типа
[0] => Array
(
[id] => 1
[familiya] => Иванов
[imya] => Василий
[otchestvo] => Константинович
[data] => 23.05.05
[positia] => 3
[email] => ivanov@mail.ru
[otdel] => 1
)
[1] => Array
(
[id] => 2
[familiya] => Петров
[imya] => Александр
[otchestvo] => Григорьевич
[data] => 13.07.09
[positia] => 1
[email] => petrov@mail.ru
[otdel] => 8
)
[2] => Array
(
[id] => 3
[familiya] => Сидоров
[imya] => Генадий
[otchestvo] => Денисович
[data] => 05.11.00
[positia] => 2
[email] => sidorov@yandex.ru
[otdel] => 5
)
|
Предположим, нам надо вывести список сотрудников, и название отдела в котором он трудится.
Название отдела хранится в отдельной таблице MySQL, например
[0] => Array
(
[id] => 1
[otdel] => транспортный
)
[1] => Array
(
[id] => 8
[otdel] => хозяйственный
)
[2] => Array
(
[id] => 5
[otdel] => бухгалтерия
)
|
Есть два варианта:
I.
1. Соединямся с таблицей работников
2. Пробегая по массиву работников соединяемся с таблицей отделов и выбираем соответствующий отдел (SELECT * FROM `otdeli` WHERE `id`=...), выводим его название
II.
1. Соединяемся с таблицей работников. (все работники)
2. Соединямся с таблицей отделов (все отделы)
3. Пробегая по работникам, пробежаться по массиву отделов и найти там соответствующий. Вывести его на экран.
Таким образом, в первом варианте каждый раз - соединение с базой. Что не хорошо.
Во втором варианте - каждый раз - цикл, т.е. работа с большим массивом данных. Если учесть что оба массива могут быть большими (например 100 работников на страницу, 100 раз надо пробежаться по массиву.) Предположим отделов 2 000 (это очень большая организация :). Это сто раз надо пробежаться по 2 000 - му массиву. Страница очень долго генерируется. Это тоже плохо.
Я не мега программмист, но у меня больше нет идей. Есть ли еще варианты?
Как можно оптимизировать работу? А если за один раз надо вытащить не только отдел, но и еще какие-нибудь данные (2, 3).
Как решать? Помогите, спецы. | |
|
|
|
|
|
|
|
для: Neokortex
(26.09.2010 в 21:55)
| | Если у вас таблицы не будут состоять из миллионов строк, то не вижу никаких проблем выполнить запрос хоть 20 раз. | |
|
|
|
|
|
|
|
для: Neokortex
(26.09.2010 в 21:55)
| | А при выборке работников через LEFT JOIN сделать запрос к таблице с отделами возможности нет?
Например, phpbb на каждой странице вывод ВСЮ информацию, какая вообще может быть о пользователе и много чего еще.
У меня в монитор не влез дамп объекта user одноименного класса. | |
|
|
|
|
|
|
|
для: Neokortex
(26.09.2010 в 21:55)
| | Если нету необходимости выводить всех сотрудников сразу, то можно сделать так чтоб выводились сотрудники не хаотично, а выводились по отделам.
Тогда запрос будет выглядеть так:
SELECT * FROM `sotrudniki` WHERE `otdel`='...' | |
|
|
|