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

Форум PHP

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

 

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

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

тема: Теория хорошего программирования. Вопрос
 
 автор: Neokortex   (26.09.2010 в 21:55)   письмо автору
 
 

Все данные берутся из базы.
Получаем массив, типа

[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).

Как решать? Помогите, спецы.

  Ответить  
 
 автор: Gubichev   (26.09.2010 в 22:15)   письмо автору
 
   для: Neokortex   (26.09.2010 в 21:55)
 

Если у вас таблицы не будут состоять из миллионов строк, то не вижу никаких проблем выполнить запрос хоть 20 раз.

  Ответить  
 
 автор: neadekvat   (26.09.2010 в 22:19)   письмо автору
 
   для: Neokortex   (26.09.2010 в 21:55)
 

А при выборке работников через LEFT JOIN сделать запрос к таблице с отделами возможности нет?
Например, phpbb на каждой странице вывод ВСЮ информацию, какая вообще может быть о пользователе и много чего еще.
У меня в монитор не влез дамп объекта user одноименного класса.

  Ответить  
 
 автор: akmal   (28.09.2010 в 17:57)   письмо автору
 
   для: Neokortex   (26.09.2010 в 21:55)
 

Если нету необходимости выводить всех сотрудников сразу, то можно сделать так чтоб выводились сотрудники не хаотично, а выводились по отделам.
Тогда запрос будет выглядеть так:
SELECT * FROM `sotrudniki` WHERE `otdel`='...'

  Ответить  
Rambler's Top100
вверх

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