SQL запрос для выбора категории

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО
#1 19 ноября 2015 в 13:07
Привет всем.
Подскажите пожалуйста, где ошибка в запросе:
  1. $model->join('con_'.$ctype_name, 'm', 'i.id = m.category_id'); // add
  2. $cats = $model->getCategoriesTree($ctype_name, $this->getOption('is_root'));
Файл \system\controllers\content\widgets\categories\widget.php строка 41
Пытаюсь получить только те категории, в которых есть запись.
Виджет Категории.
#2 19 ноября 2015 в 14:04
а что собственно не получается или что в ошибке показывается?
#3 19 ноября 2015 в 14:54
С начало думал что всё работает, но потом заметил что не отображается несколько категории с записями.
#4 19 ноября 2015 в 16:58
Evanescence, пробуйте так:
  1. $model->joinInner('con_'.$ctype_name, 'm', 'i.id = m.category_id');
#5 19 ноября 2015 в 17:35

пробуйте так:

Loadырь
Думаю проблема в том что, система игнорирует категорию в котором нет записи, даже если в подкатегориях есть запись.
Какой будет запрос чтоб взять еще и родитель?
#6 19 ноября 2015 в 18:37
Может добавить ещё один джоин
  1. $model->joinInner('con_'.$ctype_name, 'm', 'i.id = m.category_id');
  2. $model->join('con_'.$ctype_name.'_cats', 'n', 'n.id = m.parent_id');
#7 19 ноября 2015 в 20:19

$model->join('con_'.$ctype_name.'_cats', 'n', 'n.id = m.parent_id');

Loadырь
Вернул пустой результат, но там и так выборка делается из таблицы категории...
Пробовал так, но не работает
  1. $model->joinInner('con_'.$ctype_name, 'm', 'i.id = m.category_id OR i.parent_id = m.category_id');
Если с SQL не получается, может есть какой то способ для скрытые пустых категории?
с помощью jQuery?
или при выводе на шаблон с помощью php?
#8 19 ноября 2015 в 20:45
А мне ваш вариант вернул все категории, какие имеют записи, только у них проставлен шаблоне стиль display:none
#9 19 ноября 2015 в 20:49

А мне ваш вариант вернул все категории

Loadырь
Наверно у меня не показывает из за того что некоторые записи в дополнительных категориях...
Буду дальше копать
#11 19 ноября 2015 в 20:53

Наверно у меня не показывает из за того что некоторые записи в дополнительных категориях

Evanescence
В файле templates\default\controllers\content\widgets\categories\categories.tpl.php строка 11 — замените последнюю цифру (1) на число превышающее уровень вложенности ваших категорий (например 100500) и он покажет все категории и их подкатегории
#12 19 ноября 2015 в 20:58

пробуйте так:

Loadырь
По идее просто join и innerJoin это синонимы.
В смысле не в модели методы синонимы, а в sql JOIN = INNER JOIN

Вам нужно присоединять таблицу cms_con_ТИП_cats_bind
  1. $model->joinInner('con_'.$ctype_name.'_cats_bind', 'b', 'i.id = b.category_id');
И добавить группировку
  1. $model->groupBy('i.id');
Если я правильно понял конечно
#13 19 ноября 2015 в 21:06
Fuze, и ваш вариант и вариант Evanescence,
  1. $model->joinInner('con_'.$ctype_name, 'm', 'i.id = m.category_id OR i.parent_id = m.category_id');
работают одинаково у меня на локалке smile
#14 19 ноября 2015 в 21:18

работают одинаково у меня на локалке

Loadырь
как вы считаете, зачем таблица con_ТИП_cats_bind ?
Прикрепите запись к более чем одной категории и будет работать не одинаково.
#15 19 ноября 2015 в 21:48

Прикрепите запись к более чем одной категории

Fuze
Действительно, про это я и не думал.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.