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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как правильно: получить информацию об авторе поста 
:(
    Опции темы
bFree
Дата 24.8.2011, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте 
 Столкнулся с вопросом из разряда "как грамотнее" 
 Допустим, что есть посты (форум, гостевая книга, комментарии) 
 Соответсвтенно в БД для каждого поста хранится айдишник автора. 
 До этого момента вытягивал из бд все что нужно примерно вот так: 
 SELECT * FROM posts LEFT JOIN user ON post_author = user_id 

 Соответственно получал для каждого поста и инфу о пользователе, которая нужна для вывода. 

 Но дело в том, что с таким подходом получается так, что: 
 1. Для постов с одним автором информация дублируется лишние разы, что, как мне кажется, не очень хорошо 
 2. Если выводим посты циклом с fetch_assoc, то возникает необходимость передавать инфу о пользователе в какой-либо класс, который ее обработает для вывода (например, отдаст ссылку с иконкой пользователя или его соц. сети, итп итп). Соответсвенно в класс передается массив с полями-ключами пользователя. Но в этом же массиве есть еще информация о посте. Кажется, получается слишком жирно и избыточно. 

 Может быть будет грамотнее как-либо отделять данные постов от данных пользователей и сопоставлять их друг-другу уже в скрипте на выводе (но тогда получится лишний запрос и лишний цикл для обработки)?
PM MAIL   Вверх
cmygeHm
  Дата 24.8.2011, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



покажи пожалуйста print_r твоего результирующего массива, чтобы было более понятно как выглядят данные.

А вообще - это дело вкуса... Идеального кода не бывает. И опыт приходит со временем.

Это сообщение отредактировал(а) cmygeHm - 24.8.2011, 14:58
PM MAIL   Вверх
bFree
Дата 24.8.2011, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Из БД текущим способом получаю такой массив:
Код
Array
(
    [0] => Array
        (
            [gb_id] => 5
            [gb_author] => 10
            [gb_msg] => another some msg
            [gb_date] => 1314127938
            [user_id] => 10
            [user_identity] => http://twitter.com/user2
            [user_password] => 
            [user_nickname] => user2
            [user_full_name] => user2
            [user_email] => 
            [user_regdate] => 1313749773
            [user_photo] => http://api.twitter.com/1/users/profile_image/ya_vladik.json?size=bigger
            [user_activate_code] => 
            [user_blocked] => 0
            [user_etc_info] => 
        )

    [1] => Array
        (
            [gb_id] => 4
            [gb_author] => 16
            [gb_msg] => some msg
            [gb_date] => 1314127747
            [user_id] => 16
            [user_identity] => http://www.last.fm/user/user1
            [user_password] => 
            [user_nickname] => user1
            [user_full_name] => http://www.last.fm/user/user1
            [user_email] => 
            [user_regdate] => 1314123215
            [user_photo] => 
            [user_activate_code] => 
            [user_blocked] => 0
            [user_etc_info] => 
        )
)


Соответсвенно его кручу в foreach и вывожу
Также в цикле передаю каждый элемент в метод другого класа для формирования ссылки на пользователя
PM MAIL   Вверх
cmygeHm
Дата 24.8.2011, 17:32 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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




например так:

Код

$authors = array();
$author = new Author();

foreach(твой массив as $item) {

       if (!array_key_exists($item['author_id'], $authors))  {

                 
                 $authors[$item['author_id']]  = $author->getInfo($item['author_id']);

      }

}


А вообще лучше запрос к БД как-нить перебрать. Вопрос твой специфичен, опять же повторюсь: "А вообще - это дело вкуса... Идеального кода не бывает. И опыт приходит со временем."

Можешь в кроне себе поставить задачу на год, чтобы через год сообщила, что этот кусок кода стоит пересмотреть smile Приятно удивишься smile

Это сообщение отредактировал(а) cmygeHm - 24.8.2011, 17:33
PM MAIL   Вверх
Smorodin
Дата 2.9.2011, 13:25 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрейший
**


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

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



Когда выводил комментарии (штук 200), делал так: складывал ИД юзеров в массивчик, при обходе сообщений проверял наличие ИД юзера в массиве, если нет такого - добавлял. Потом 1 доп. запросом только к таблицам пользователей доставал инфу пользователей, чтобы повторяющиеся данные не хранить. Работало шустро, и код получился красивый.


--------------------
Сделать можно все, только вопрос - когда?
PM MAIL 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.0792 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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