COUNT() в xPDO
Помогите сделать правильный запрос в базу на PDO, у меня никак не получается.
Мне нужно вывести количество тикетов из одной категории (parent), у которых тв country равен 1.
Делаю я это в цикле для всех стран. То есть для каждой итерации значение тв country будет меняться.
P.S. Пробовал по примеру тут и тут но пока ничего не выходит у меня…
Мне нужно вывести количество тикетов из одной категории (parent), у которых тв country равен 1.
Делаю я это в цикле для всех стран. То есть для каждой итерации значение тв country будет меняться.
P.S. Пробовал по примеру тут и тут но пока ничего не выходит у меня…
Поблагодарить автора
Отправить деньги
Комментарии: 18
1. Как я понимаю нужно джойнить 2 таблицы, modx_site_content и modx_tmplvar_contentvalues? Как это правильно сделать?
2. Забыл сказать, что тикетов оооооочень много. То есть где-то около 140000. Но в одной категории (parent) тикетов максимум 80000 (я буду по parent выбирать). Возможно ли вывести количество по странам (тв country), не положив при этом сервер?
2. Забыл сказать, что тикетов оооооочень много. То есть где-то около 140000. Но в одной категории (parent) тикетов максимум 80000 (я буду по parent выбирать). Возможно ли вывести количество по странам (тв country), не положив при этом сервер?
Исходя из количества тикетов, как решить проблему с выводом тикетов через mFilter2, т.к. сейчас выводится следующая ошибка:
Вызов mFilter2:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 72 bytes) in /home/*****/www/core/components/msearch2/model/msearch2/filters.class.php on line 57
Сайт на modhost.pro.Вызов mFilter2:
[[!mFilter2?
&element=`getTickets`
&tpl=`tpl.blog-item`
&includeTVs=`export_country,export_city,import_country,import_city,cargo_type,transport_type,face,phone,skype,email`
&limit=`5`
&sortby=`publishedon`
&parents=`35`
&filters=`
tv|export_country,
tv|export_city,
tv|import_country,
tv|import_city,
tv|cargo_type,
tv|transport_type
`
]]
Увеличил тариф на Максимальный и проблема решилась.
512 MB memory_limit вместо 128 — конечно решилась =)
Ага, зато я теперь довольный как слон! Похоже такой раздутый сайт нужно оставлять на Максимальном тарифе )))
Если хочешь фильтровать кучу документов, то конечно. Они же все собираются в массивы, которые занимают память, и потом по ним уже идёт работа.
Чем больше данных, тем больше массивы и тем больше нужно памяти — иначе никак.
Чем больше данных, тем больше массивы и тем больше нужно памяти — иначе никак.
del
delНе совсем понял.
Я вначале спросил, а потом нашел ответ, в письме на почте можете увидеть оригинал сообщения.
Мое личное мнение — xPDO тут нафиг не нужен. Все более чем элементарно:
1. Создаем сниппет count, код которого ниже:
Ну и собственно вызов сниппета будет
1. Создаем сниппет count, код которого ниже:
$q = $modx->prepre("SELECT COUNT(*) FROM `modx_site_tmplvar_contentvalues` WHERE `tmplvarid` = '1' AND `value` = '$country'");
$q->execute();
return $q->fetchColumn();
Из которого tmplvarid это ИД TV (Я надеюсь где его найти знаете?)Ну и собственно вызов сниппета будет
[[!count? &country=`1`]]
Все.
Я почему спрашивал, потому что нужно выбрать не общее число указаний стран, а именно у тикетов, у которых parent=37 например. Так как есть несколько категорий (секций) тикетов. Тут нужно или джойнить или что-то ещё.
Мне нужно вывести количество тикетов, у которых тв country равен 1.Как можно заметить, в исходном вопросе отсутствует условие, при котором имеется parent.
Твой вариант классный, спасибо! Но у меня не получилось его прикрутить к моей задаче…
Как придумать логику, чтобы были подсчитаны количество тикетов отдельной категории (по parent), у которых значение тв country = 1 например?
Разве что перебором, или запуском в моём сниппете сниппета pdoResources с критерием выборки? (кстати, нужно будет потестить этот вариант, но в цикле прийдётся его запустить отдельно для 230 стран...)
Нету больше никаких мыслей, как связать всё это одним запросом, чтобы поменьше циклов всяких было?
Как придумать логику, чтобы были подсчитаны количество тикетов отдельной категории (по parent), у которых значение тв country = 1 например?
Разве что перебором, или запуском в моём сниппете сниппета pdoResources с критерием выборки? (кстати, нужно будет потестить этот вариант, но в цикле прийдётся его запустить отдельно для 230 стран...)
Нету больше никаких мыслей, как связать всё это одним запросом, чтобы поменьше циклов всяких было?
$q = $modx->newQuery('TicketsClass');
$q->innerJoin('TVClass', "TVAlias", "TVAlias.tmplvarid = {$tv_id} AND TVAlias.ticket_id = TicketsClass.id");
$q->select(array(
"count(*)",
"TVAlias.value"
));
$q->groupby(2);
$q->sortby(1, "DESC");
$s = $q->prepare();
$s->execute();
$rows = $s->fetchAll(PDO::FETCH_ASSOC);
И этому всему ресурсов практически не нужно.
Классно, спасибо тебе большое! Именно такой ответ я и искал! Иду приспосабливать его к своей задаче!
На самом деле подобное надо искать на форумах по MySQL, а не по MODX. Здесь xPDO — Только инструмент. Но он нужен только для составления SQL-запроса. Если нет понимания какой именно и как запрос составить — то не составишь. Поэтому прокачивай SQL. Это на самом деле простейший запрос.
ок, так и делаю изо всех сил. Спасибо!
Пожалуйста!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.