Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> PHP+MySQL. Вопрос по теории программирования 
:(
    Опции темы
neokortex
Дата 26.9.2010, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 19.3.2007

Репутация: нет
Всего: нет



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


[0] => Array 
        ( 
            [id] => 1
            [familiya] => Иванов 
            [imya] => Василий 
            [otchestvo] => Константинович 
            [data] => 23.05.05 
            [positia] => 3 
            [email] => [email protected]
            [otdel] => 1 
        ) 

  [1] => Array 
        ( 
            [id] => 2
            [familiya] => Петров 
            [imya] => Александр 
            [otchestvo] => Григорьевич 
            [data] => 13.07.09 
            [positia] => 1 
            [email] => [email protected]
            [otdel] => 8
        ) 

  [2] => Array 
        ( 
            [id] => 3
            [familiya] => Сидоров 
            [imya] => Генадий 
            [otchestvo] => Денисович 
            [data] => 05.11.00 
            [positia] => 2 
            [email] => [email protected]
            [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 (это очень большая организация smile. Это сто раз надо пробежаться по 2 000 - му массиву. Страница очень долго генерируется. Это тоже плохо.

Я не мега программмист, но у меня больше нет идей. Есть ли еще варианты?
Как можно оптимизировать работу? А если за один раз надо вытащить не только отдел, но и еще какие-нибудь данные (2, 3). 

Как решать? Помогите, спецы.
PM MAIL   Вверх
ayax2005
Дата 26.9.2010, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


echo $smile
**


Профиль
Группа: Участник
Сообщений: 516
Регистрация: 17.4.2008
Где: Питер

Репутация: 2
Всего: 11



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


--------------------
все вопросы - из-за неверной формулировки задачи
PM MAIL ICQ   Вверх
ksnk
Дата 26.9.2010, 21:06 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



III - пишем запрос к базе
Код

select employee.*, department.name from employee left join department on department.id=employee.otdel;

получаем такой-же массив как и с сотрудниками, но добавится еще одно поле - имя отдела.

Это сообщение отредактировал(а) ksnk - 26.9.2010, 21:06


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.3549 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.