sql >> Databasteknik >  >> RDS >> Mysql

Hur får man de mest populära taggarna från normaliserade tabeller?

Du kan göra en enkel ändring av din fråga:

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;

Förmodligen är de olika ID:n NULL när de inte är lämpliga. Om du av någon konstig anledning faktiskt lagrade värden i alla tre id:n för en given xref kan du göra:

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;



  1. Hur kombinerar man två rader och beräknar tidsskillnaden mellan två tidsstämpelvärden i MySQL?

  2. mysql villkorlig infogning - om inte existerar infoga

  3. Varför använda join istället för var i MySQL-frågor?

  4. Hur man normaliserar kommaseparerade värden i tabellkolumnen och kör sedan en fråga