В некоторых других ответах предлагается использовать псевдонимы в дочерней таблице для каждого предложения фильтра - это может быть неэффективно или плохо масштабироваться.
Рассмотрим:
SELECT x.*
FROM Article x INNER JOIN
(SELECT t.article_id, COUNT(t.article_id)
FROM articleTopics t
WHERE t.topic_id IN ([your_list_of_topics])
GROUP BY t.article_id
HAVING COUNT(t.article_id)>=[number of elements in [your_list_of_topics]]
ORDER BY COUNT(t.article_id) DESC
LIMIT 0,100) AS ilv
ON x.id=ilv.article_id
Еще одним преимуществом этого подхода является то, что структура запроса не должна изменяться в зависимости от количества тем, которые вы ищете - вы можете даже поместить их во временную таблицу и выполнить объединение вместо использования 'IN (...) 'буквально.
Вам нужно попробовать его, чтобы увидеть, какой запрос ведет себя лучше.