Cette requête permet de trouver pour un article donné des articles similaires en se basant sur les tags. Elle retourne les articles qui ont 50% des tags qui correspondent dans les deux sens.
Dans l'exemple suivant on traite l'article avec pour ID 100 :
SELECT
ART_ID,
COUNT(*) AS MATCHES,
(
SELECT COUNT( * )
FROM ARTICLES_TAGS
WHERE t1.ART_ID = ART_ID
GROUP BY ART_ID
) AS TAG_COUNT
FROM ARTICLES_TAGS t1
WHERE TAG_ID
IN
(
SELECT TAG_ID
FROM ARTICLES_TAGS
WHERE ART_ID =100
)
AND ART_ID !=100
GROUP BY ART_ID
HAVING
(MATCHES /(SELECT greatest(COUNT(*),1) FROM ARTICLES_TAGS WHERE ART_ID =100 GROUP BY ART_ID ) >= 0.5)
AND MATCHES >=TAG_COUNT/(1/0.5)
Image : 37hz