sql >> Databáze >  >> RDS >> Mysql

Řazení položek se shodnými štítky podle počtu odpovídajících štítků

Zkuste něco takového:

select article_id, count(tag_id) as common_tag_count
from articles_tags 
group by tag_id
where tag_id in (
    select tag_id from articles_tags where article_id = 2
) and article_id != 2
order by common_tag_count desc;

Syntaxe může vyžadovat drobné úpravy pro MySQL.

nebo tento, který skutečně funguje:;-)

SELECT at1.article_id, Count(at1.tag_id) AS common_tag_count
FROM articles_tags AS at1 INNER JOIN articles_tags AS at2 ON at1.tag_id = at2.tag_id
WHERE at2.article_id = 2
GROUP BY at1.article_id
HAVING at1.article_id != 2
ORDER BY Count(at1.tag_id) DESC;


  1. Jak proměnit 2 dotazy se společnými sloupci (A, B) a (A, C) na jediný (A, B, C)?

  2. Optimalizace dotazů SQL:Doporučené postupy pro lepší výkon

  3. Rozdělení dat pro rozsáhlé aplikace

  4. Omezení vráceného záznamu z SQL dotazu v Oracle