VBsupport перешел с домена .ORG на родной .RU
Ура!
Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей
Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже: Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота. Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
Как вывести в memberlist количество созданных юзером тем
0
Не постов (это предусмотрено штатно) а именно тем?
Ясное дело, что копать надо memberlist.php , но я взглянул туда и чуть не заплакал в голос, поскольку тоже захотел того, что курил Кир Дарби, когда это писал.
Code:
$users = $db->query_read_slave("
SELECT user.*,usertextfield.*,userfield.*, user.userid, options,
IF(user.displaygroupid=0, user.usergroupid, user.displaygroupid) AS displaygroupid, infractiongroupid
$repcondition
" . iif($show['avatarcol'], ',avatar.avatarpath,NOT ISNULL(customavatar.userid) AS hascustomavatar,customavatar.dateline AS avatardateline, customavatar.width AS avwidth, customavatar.height AS avheight') ."
" . iif($show['profilepiccol'], ', pp_profilepic.requirement AS profilepicrequirement, customprofilepic.userid AS profilepic, customprofilepic.dateline AS profilepicdateline, customprofilepic.width AS ppwidth, customprofilepic.height AS ppheight') . "
$lastvisitcond
$agecondition
" . iif($usergroupid, ", NOT ISNULL(usergroupleader.usergroupid) AS isleader") . "
$hook_query_fields
FROM " . TABLE_PREFIX . "user AS user
LEFT JOIN " . TABLE_PREFIX . "usertextfield AS usertextfield ON(usertextfield.userid=user.userid)
LEFT JOIN " . TABLE_PREFIX . "userfield AS userfield ON(userfield.userid=user.userid)
" . iif($show['reputationcol'], "LEFT JOIN " . TABLE_PREFIX . "reputationlevel AS reputationlevel ON(user.reputationlevelid=reputationlevel.reputationlevelid) ") . "
" . iif($show['avatarcol'], "LEFT JOIN " . TABLE_PREFIX . "avatar AS avatar ON(avatar.avatarid = user.avatarid) LEFT JOIN " . TABLE_PREFIX . "customavatar AS customavatar ON(customavatar.userid = user.userid)") . "
" . iif($show['profilepiccol'], "
LEFT JOIN " . TABLE_PREFIX . "customprofilepic AS customprofilepic ON (user.userid = customprofilepic.userid)
LEFT JOIN " . TABLE_PREFIX . "profileblockprivacy AS pp_profilepic ON
(pp_profilepic.userid = user.userid AND pp_profilepic.blockid = 'profile_picture')") . "
" . iif($usergroupid, "LEFT JOIN " . TABLE_PREFIX . "usergroupleader AS usergroupleader ON (user.userid = usergroupleader.userid AND usergroupleader.usergroupid=$usergroupid) ") . "
$hook_query_joins
WHERE $condition
AND (user.usergroupid IN ($ids)" . (defined('MEMBERLIST_INCLUDE_SECONDARY') ? (" OR FIND_IN_SET(" . implode(', user.membergroupids) OR FIND_IN_SET(', $idarray) . ", user.membergroupids)") : '') . ")
$hook_query_where
ORDER BY $sqlsort $sortorder $secondarysortsql
LIMIT " . ($limitlower - 1) . ", $perpage
");
Я просто прикинул, что при выводе (условно) 100 юзеров на страницу мне придется делать 100 запросов
Можно не делать запросов вообще, если использовать группировку. Пример запроса
PHP Code:
$users = $db->query_read_slave(" SELECT user.username, COUNT(thread.threadid) AS threadcount FROM " . TABLE_PREFIX . "user AS user LEFT JOIN " . TABLE_PREFIX . "thread AS thread ON(thread.postuserid = user.userid) WHERE userid IN(-1,1,2) GROUP BY user.userid ");
Результат
То есть, создаем модуль на хуке memberlist_fetch
Код модуля:
PHP Code:
$hook_query_fields .= ", COUNT(thread.threadid) AS threadcount"; $hook_query_joins .= " LEFT JOIN " . TABLE_PREFIX . "thread AS thread ON(thread.postuserid = user.userid)"; $hook_query_where .= " GROUP BY user.userid";
Так как для добавления группировки нет соответствующего $hook, можно добавить его на $hook_query_where. Но будьте внимательны, если у вас есть хаки, которые используют этот самый $hook_query_where
Last edited by YURSHAT : 08-15-2015 at 08:20 PM.
@BTC
СпециалистЪ
Join Date: Aug 2013
Posts: 727
Версия vB: 3.8.x
Reputation:
Knowing 240
Репутация в разделе: 47
1
@Gostemilov,
Quote:
Originally Posted by Gostemilov
Я просто прикинул, что при выводе (условно) 100 юзеров на страницу мне придется делать 100 запросов.
Нет, видите переменные $hook_query_fields и $hook_query_joins ?
Если заджойнитесь туда, то вытягивать будет наряду с общим запросом, и по этому не придется делать отдельно 100 запросов.