Вывод количества всех просмотров ресурсов
Добрый день! С помощью данного сниппета пытаюсь выводить количество всех просмотров ресурсов добавленных пользователем. Проблема в том, что ресурсов более 1000, и из-за этого данный сниппет выполняется очень долго. Как можно ускорить выполнения данного сниппета? Или есть способ реализации по проще?
$output_alluser = $modx->runSnippet('pdoUsers',array(
'groups' => 'manager_main',
'tpl' => '@INLINE {{+id}},'
));
$idmanager= isset($idmanager) ? $idmanager: $output_alluser;
$output = $modx->runSnippet('getTickets',array(
'user' => $idmanager,
'showUnpublished' => '1',
'parents' => '0',
'tpl' => '@INLINE {{+views}},',
'limit' => '0',
'fastMode' => '1',
));
$output = substr($output, 0, -1);
$str_views = split(",", $output);
echo array_sum($str_views);
Поблагодарить автора
Отправить деньги
Комментарии: 2
Примерно как-то вот так:
$user_id = $modx->user->get('id');
$totalquery = $modx->newQuery('Ticket', array('class_key' => 'Ticket','published:>=' => 0,'deleted' => 0, 'createdby' => $user_id));
$totalquery->prepare();
$totalquery->stmt->execute();
$restotalquery = $totalquery->stmt->fetchAll(PDO::FETCH_ASSOC);
if (empty($restotalquery)){
$parent_iduser = 0;
}else{
foreach ($restotalquery as $rowtotalquery){
$parent_iduser[] = $rowtotalquery[Ticket_id].',';
}
$parent_iduser = chop(join($parent_iduser), ' ,');
$modx->toPlaceholder('total_id',$parent_iduser);
}
$sql = "SELECT parent, timestamp, COUNT(DISTINCT uid) as uid
FROM `modx_tickets_views`
WHERE parent IN($parent_iduser)
group by parent
having count(uid) >= 1
";
$query = new xPDOCriteria($modx, $sql);
if ($query->prepare() && $query->stmt->execute()){
$res = $query->stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($res as $row){
$views += $row[uid];
$modx->toPlaceholder('total_views',$views);
}
}
echo "
<p>Просмотров всего: [[+total_views]]</p>
<p>ID тикетов пользователя: [[+total_id]]</p>";
Спасибо
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.