Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment obtenir les balises les plus populaires dans l'ensemble à partir de tableaux normalisés ?

Vous pouvez apporter une simple modification à votre requête :

SELECT t.id, t.tag, COUNT(*) AS cnt
FROM tags_xref xrf INNER JOIN
     tags t
     ON xrf.tag_id = t.id
GROUP BY t.id, t.tag
ORDER BY COUNT(*) DESC
LIMIT 20;

Vraisemblablement, les différents identifiants sont NULL quand ils ne sont pas appropriés. Si, pour une raison étrange, vous avez en fait stocké des valeurs dans les trois identifiants pour une xréf donnée, vous pouvez faire :

SELECT t.id, t.tag,
       (COUNT(story_id) + COUNT(discussion_id) + COUNT(article_id) ) AS cnt
FROM tags_xref xrf INNER JOIN
     tags t
     ON xrf.tag_id = t.id
GROUP BY t.id, t.tag
ORDER BY cnt DESC
LIMIT 20;