У вас есть несколько вариантов - некоторые могут привести к проблемам с производительностью, но это зависит от многих факторов.
Вы можете разбить его на несколько запросов. Один запрос для считывания всех категорий:
SELECT categories_id FROM Categories
Затем для каждой категории зачитайте семь лучших статей:
SELECT
id,
title,
...etc.
FROM articles
where categories_id = 1
... и так далее для каждой категории.
Преимущество в том, что его немного проще понять, но недостатком является то, что он превращает один запрос в 1 + (1 * количество кошек). Опять же, вы можете ограничить количество категорий, чтобы у вас был элемент управления. Иногда вы обнаруживаете, что 5 простых запросов работают намного лучше, чем 1 сложный!
Этот тип предполагает, что вы вызываете SQL из некоторого кода, которым вы управляете - так ли это?