Разделы

  
 

xPDOCriteria валит сервер, что за нах?

Пишу маленький запросец, в ответ Bad Gateway, с чего бы это?

$top = 10;
$mytable = $modx->getTableName('Pagehit');  
$c = new xPDOCriteria($modx,"SELECT `resource_id`, count(`resource_id`) AS `cnt` FROM ".$mytable." GROUP BY `resource_id` ORDER BY `cnt` DESC LIMIT ".$top);
$coll = $modx->getCollection('Pagehit',$c);

Сам запрос проверен через консоль, 100% выборка проходит, а в сниппете нет=\
  • 0
  • 8 марта 2012, 12:41
  • Tesby
  • 2

Помогите оптимизировать сниппет подсчета кол-ва по дочерним (решено)

Есть сниппет, считает сумму элементов столбца 'kol' в своей таблице 'tmc', отдельная таблица в базе.

Причем элементов не всех, а только дочерних к документу

Например: Дано здание 1, несколько этажей, несколько офисов, сотрудники… надо зная айди здания, посчитать количество тмц в сумме закрепленных за зданием, офисом, сотрудником (просто передавая айди). ТМЦ закреплены за сотрудником.

Он работает, но по базе где несколько тысяч тмц, считает долго и делает большее 5000 запросов к базе

вот сниппет


<?php
$doc_child = $modx->getChildIds($doc_id);  // получаем массив дочерних

$sum = 0; // начальная сумма всех тмц

foreach ($doc_child as $values) {

$a = $values;

// запрос на выборку из таблицы столбца kol с нужным айдишником

$sql = " 
      SELECT `kol`
      FROM `tmc`
      WHERE `parent`= $a
";


$result = $modx->db->query($sql); 
$row = $modx->db->getColumn('kol',$result); // вытаскиваем только первый столбец
$row1 = array_sum($row); // получаем сумму элементов массива
$sum = $sum + $row1; // прибавляем к общей сумме
}

//добавляем еще для документа
$doc_ids = $modx->getDocument($doc_id);  // получаем айди сотрудника
$a = (array_values($doc_ids));
$a1 = $a[0];
// запрос на выборку из таблицы столбца kol с нужным айдишником
$sql2 = " 
      SELECT `kol`
      FROM `tmc`
      WHERE `parent`= $a1
";

$result = $modx->db->query($sql2); 
$row2 = $modx->db->getColumn('kol',$result); // вытаскиваем только первый столбец
$row2sum = array_sum($row2); // получаем сумму элементов массива


print ($sum+$row2sum); // вывод кол-ва ТМЦ
?>



его вызов

[[count_tmc2? &doc_id=`[+id+]`]]


таблица имеет структуру

CREATE TABLE IF NOT EXISTS `tmc` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `parent` varchar(255) NOT NULL,
  `tip` varchar(255) NOT NULL,
  `name` varchar(255) NOT NULL,
  `num` varchar(255) NOT NULL,
  `kol` int(6) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ;

Выборка чилдренов и грамотный запрос в базу.

Как правильно выбрать потомков 2-го уровня?
Структура:
-Раздел
--Подраздел
---подподраздел
---подподраздел
--Подраздел
---подподраздел
---подподраздел

Есть ID Раздела — надо получить список «подподраздеов».
И сделать выборку

$result = «SELECT value FROM `site_tmplvar_contentvalues` WHERE contentid= (СПИСОК ПОДПОДРАЗДЕЛОВ) AND tmplvarid=9»;

пробовал where contentid IN ($spisok) — не работает.
Может есть способы попроще, кто подскажет?

В общем это система тегов, но для каждого раздела своя должна быть. Поэтому вариант с tagLinks не прокатывает (пытался его ковырять — всё равно упираюсь в грамотное построение запроса)

Чилдренов выбрал: getParentIds, раньше не пользовался, пробегал мимо глаз…
С запросом вопрос открыт.