Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы » Как организовать вывод тегов для определенной категории?

Как организовать вывод тегов для определенной категории?


     01.04.2020    Все вопросы » Общие вопросы    610

вопрос
Здравствуйте. Помогите сделать правильно выборку в SQL для вывода тегов определенной категории.
Есть стандартный запрос:
$db->query("SELECT tag, COUNT(*) AS count FROM " . PREFIX . "_tags GROUP BY tag ORDER BY count DESC LIMIT 0,{$config['tags_number']}");

он выводит общее количество тегов, а я хочу для определенной категории. Заранее спасибо.

Ответил: LazyDev


Вывод по текущей категории на которой находится пользователь.

Если у вас нет мультикатегорий.
SELECT tag, COUNT(*) AS count FROM " . PREFIX . "_tags t LEFT JOIN " . PREFIX . "_post p ON(t.news_id=p.id) WHERE p.category IN ('{$category_id}') GROUP BY tag ORDER BY count DESC LIMIT 0,{$config['tags_number']}


Если у вас MySQL 8.0 и выше и мультикатегории и DLE ниже 13.2
SELECT tag, COUNT(*) AS count FROM " . PREFIX . "_tags t LEFT JOIN " . PREFIX . "_post p ON(t.news_id=p.id) WHERE p.category REGEXP '([[:punct:]]|^)({$category_id})([[:punct:]]|$)' GROUP BY tag ORDER BY count DESC LIMIT 0,{$config['tags_number']}


Если у вас MySQL НИЖЕ 8.0 и мультикатегории и DLE ниже 13.2
SELECT tag, COUNT(*) AS count FROM " . PREFIX . "_tags t LEFT JOIN " . PREFIX . "_post p ON(t.news_id=p.id) WHERE p.category REGEXP '[[:<:]]({$category_id})[[:>:]]' GROUP BY tag ORDER BY count DESC LIMIT 0,{$config['tags_number']}


Если у вас мультикатегории и DLE 13.2 и выше
SELECT tag, COUNT(*) AS count FROM " . PREFIX . "_tags t LEFT JOIN " . PREFIX . "_post p ON(t.news_id=p.id) INNER JOIN (SELECT DISTINCT(" . PREFIX . "_post_extras_cats.news_id) FROM " . PREFIX . "_post_extras_cats WHERE cat_id IN ({$category_id})) c ON (p.id=c.news_id) GROUP BY tag ORDER BY count DESC LIMIT 0,{$config['tags_number']}

10 комментариев

TeraMoune
Эксперт

TeraMoune - 1 апреля 2020 16:02 -

теги не имеют привязки к категориям

dj-avtosh
PHP-developer

dj-avtosh - 1 апреля 2020 16:22 -

похоже он хочет вывести теги новостей текущей категории.

https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

TeraMoune
Эксперт

TeraMoune - 1 апреля 2020 16:40 -

Ну разницы тут никакой нету, таблица не имеет ячеек с данными к какой категории относиться текущий тег. Если только теги принадлежащие к категории заранее не выбрать в момент просмотра категории и потом уже выборку по этим тегам сделать через tag IN.

anfalin
Юзер

anfalin - 1 апреля 2020 16:50 -

Ну так можно сделать. Сайт новый поэтому можно сделать привязку

dj-avtosh
PHP-developer

dj-avtosh - 1 апреля 2020 18:47 -

ну вот, в ответе то что я говорил.

https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

TeraMoune
Эксперт

TeraMoune - 1 апреля 2020 19:26 -

Наверное это хороший способ, я естественно не знаю будет ли он хорош на активном сайте с большим количеством данных и частым обращением к страницам сайта.

anfalin
Юзер

anfalin - 1 апреля 2020 16:27 -

Так нужно сделать. Вот поэтому и пишу

LazyDev
PHP-developer

LazyDev - 1 апреля 2020 17:45 -

anfalin, ничего не надо делать. Ответ дал. Используйте нужный запрос.

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

TeraMoune
Эксперт

TeraMoune - 1 апреля 2020 19:27 -

Ответ бы еще дополнить правкой кода для создаваемых файлов кэша. А то будет открыли категорию 3 и создали кэш с выборкой тегов из данной категории затем перешли в категорию 5 и увидели всё тот же блок с тегами для другой категории.

Это конечно если кэширование используется.

anfalin
Юзер

anfalin - 1 апреля 2020 19:45 -

Это всё я сделаю.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх