вопрос
Здравствуйте. Помогите сделать правильно выборку в SQL для вывода тегов определенной категории.
Есть стандартный запрос:
он выводит общее количество тегов, а я хочу для определенной категории. Заранее спасибо.
Есть стандартный запрос:
$db->query("SELECT tag, COUNT(*) AS count FROM " . PREFIX . "_tags GROUP BY tag ORDER BY count DESC LIMIT 0,{$config['tags_number']}");
он выводит общее количество тегов, а я хочу для определенной категории. Заранее спасибо.
Вывод по текущей категории на которой находится пользователь.
Если у вас нет мультикатегорий.
Если у вас MySQL 8.0 и выше и мультикатегории и DLE ниже 13.2
Если у вас MySQL НИЖЕ 8.0 и мультикатегории и DLE ниже 13.2
Если у вас мультикатегории и 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 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']}