Студия креативных разработок DevArt.PRO.
Разработка сайтов и форумов под ключ!
Сильнейшая команда в России по vBulletin - читать подробнее...
 
 
 
 

 
 
Здесь скоро опять что то будет...
 
 
 
 
 
 
Loading

Вернуться   форум vBSupport.org > vBSupport.org > Гурушник > Кодер

Объявления
  • Изменения в правах
  • Каталог Фрилансеров
  • Добро пожаловать!
  • Premoderation
  • Новичкам!
  • For English speaking users
Ответ
 
Опции темы Опции просмотра
Старый 20.08.2011, 04:45   #1
Специалист
vBSNews
 
Аватар для syn
Оптимизация запроса для аватарок постеров

Коллеги, ужны ваши советы, подсказки по коду.
Как бы так хитро извернуться для уменьшения количества запросов.

Это код вывода аватарок на главной у ластпостеров.

Код:
$qtext = "SELECT userid, avatarid, avatarrevision  FROM `" . TABLE_PREFIX . "user` WHERE username = \"" . $lastpostinfo[lastposter] . "\"";
$qresult = $vbulletin->db->query_read($qtext);
$rowarray = $vbulletin->db->fetch_array($qresult);
$userid = $rowarray['userid'];
$avatarid = $rowarray['avatarid'];
$avatarrevision = $rowarray['avatarrevision'];

if (!($userid))
{
	// Dummy id, will result to have anonymous avatar
	$userid = 0;
}

if ($avatarid)
{
	$avatar = $vbulletin->db->query_first("SELECT avatarpath FROM `" . TABLE_PREFIX . "avatar` WHERE avatarid = " . $avatarid . "");
	$avatarpath = $avatar['avatarpath']; 
	$avatarforumhome = "<img src=\"$avatarpath\" style=\"width:25px; height:25px\" alt=\"$lastpostinfo[lastposter]\" />"; 
}
else
{
	// Check if it's custom avatar
	if ($avatardata = $vbulletin->db->query_first("SELECT dateline, userid FROM `" . TABLE_PREFIX . "customavatar` WHERE userid = " . $userid . ""))
	{ 
		$useravatarurl = $vbulletin->options[avatarurl] . "/avatar" . $avatardata['userid'] . "_" . $avatarrevision . ".gif";
		$avatarforumhome = "<img src=\"$useravatarurl\" style=\"width:25px; height:25px\" alt=\"$lastpostinfo[lastposter]\" />";
	}
	else
	{
		// No avatar for this user
		$avatarforumhome = "<img src=\"tps/img/unknown.gif\" style=\"width:25px; height:25px\" alt=\"$lastpostinfo[lastposter]\" />";
	} 
}
  Ответить с цитированием
Рекламка
Реклама на форуме

Файловый Архив

  • Неограниченное количество категорий и суб-категорий
  • Тонкие настройки прав доступа
  • Предпросмотр медиа файлов: FLV, IFLV, F4A, F4V, MP4, MP3, MOV и других...
  • Мультизагрузка файлов - SWFUploader
  • Добавление файлов с сервера
Подробности и история обновлений продукта в этой теме
Старый 20.08.2011, 06:07   #2
kerk
k0t
 
Аватар для kerk
перепиши запрос таким образом, что бы вывод результата был в цикле
PHP код:
$qresult $vbulletin->db->query_read("здесь_запрос_всех_данных");

while(
$rowarray $vbulletin->db->fetch_array($qresult))
{
       
// здесь вывод результата запроса

  Ответить с цитированием
Старый 20.08.2011, 16:13   #3
kerk
k0t
 
Аватар для kerk
да, еще
если планируется использование на странице форумхом или форумдисплей, то там достаточно хуков, что бы не писать свои запросы, а использовать готовые вобловские + выборка нужных полей
  Ответить с цитированием
Старый 20.08.2011, 16:59   #4
syn
Специалист
vBSNews
 
Аватар для syn
ага, на форумхоум, но я полазил там вокруг да около, но чет пока так и не сообразил, каким воблозапросом это дело выдернуть.
  Ответить с цитированием
Старый 20.08.2011, 17:02   #5
kerk
k0t
 
Аватар для kerk
индексная страница, еще не означает ковыряние в файле index.php
там нужно рыть в файлах функций, которые создают форумбиты
functions_forumlist.php
functions_forumdisplay.php
  Ответить с цитированием
Старый 20.08.2011, 17:14   #6
syn
Специалист
vBSNews
 
Аватар для syn
kerk, да я в индекс и не пялился, разумеется =)
вот как раз по фанкшинам и зырил.

syn добавил 20.08.2011 в 17:13
ну и в любом случае, все равно на хоум пойдет +1 запрос [как минимум].
совсем избавиться от лишнего запроса ж ведь все равно не получится, даже при использовании воблозапроса.

хотя, безусловно корректнее, использовать родной механизм.


syn добавил 20.08.2011 в 17:14
пойду дальше втыкать в воблофанкшины =)

Последний раз редактировалось syn; 20.08.2011 в 17:14.. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 20.08.2011, 17:21   #7
kerk
k0t
 
Аватар для kerk
хм
щас глянул файлы
в одной из функций нет хуков вообще, значит хрен чего сотворишь
значит нужно редактировать файлы + добавлять поля в таблицу forum
тогда можно вообще обойтись без доп запросов
т.е. при добавлении поста, вносить данные о юзере в эти поля, кроме тех, что форум сам пихает, а это время последнего поста, кол-во тем, кол-во ответов
  Ответить с цитированием
Старый 20.08.2011, 17:31   #8
syn
Специалист
vBSNews
 
Аватар для syn
я вот еще размышлял над тем, что раз у нас уже есть ид ластпостера, то чисто гипотетически, можно подвязаться к иду ласпостера и просто добавлять к нему выборку из аватар -> аватарид_аватарревижн.
  Ответить с цитированием
Старый 20.08.2011, 17:32   #9
netwind
Гуру
 
Аватар для netwind
если уж экономить запросы, то можно так написать:
Код:
select
 ifnull(avatar.avatarpath,
  concat('customavatars/avatar',user.userid, '_', avatarrevision, '.gif')
 ) filename
from user
 left join avatar on (user.avatarid=avatar.avatarid)
 left join customavatar on (user.userid=customavatar.userid)
where user.userid=$userid
тут сделано предположение, что аватары в файловой системе в папке customavatars, а не в базе.
для хаков широко применения такое может не подойти

netwind добавил 20.08.2011 в 17:32
Цитата:
Сообщение от syn Посмотреть сообщение
чисто гипотетически можно подвязаться к иду ласпостера
поздравляю. ты придумал JOIN теперь почитай про него в документации.

Последний раз редактировалось netwind; 20.08.2011 в 17:32.. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 20.08.2011, 17:36   #10
kerk
k0t
 
Аватар для kerk
Цитата:
Сообщение от syn Посмотреть сообщение
просто добавлять к нему выборку из аватар -> аватарид_аватарревижн
но это все равно запрос =)
я же пытаюсь уйти вообще от дополнительных запросов, естессно в этом случае нужно сделать больше телодвижений в других местах, т.с. "подготовить плацдарм" для дальнейшей работы скрипта
а потом просто выдернуть готовые данные вобло функциями, все наши данные будут в кэше
  Ответить с цитированием
Ответ

Закладки

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



 
 

Текущее время: 02:53 26.05.2012. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.6.9
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd. Перевод: zCarot