Вы должны опубликовать список таблиц и полей, которые они содержат для данных, которые вы хотите видеть.
Но общая идея должна выглядеть примерно так (при условии, что у таблицы потоков есть внешний ключ на post_id к post_id таблицы отношений):
SELECT t.*, r.category_name FROM threads as t
INNER JOIN relations as r on t.thread_id = r.thread_id
Только что обновил вышеуказанный запрос на основе полей, которые вы только что перечислили.
К вашему сведению: если вас беспокоит производительность, вы должны выполнить объединение данных в запросе к базе данных, как показано выше, выполнение дополнительных запросов для каждой строки в вашем начальном наборе данных приведет к дополнительным вызовам * число потоков. Теперь умножьте это на число пользователей, просматривающих эту страницу, и нагрузку на базу данных, увеличивающуюся в геометрической прогрессии и без необходимости. Все это может быть сделано в одном запросе к базе данных, так что каждый пользователь будет запускать только один запрос в базе данных, а не сотни или тысячи потенциально за просмотр страницы.
Хорошо, в этом случае попробуйте что-то вроде этого:
SELECT t.*, GROUP_CONCAT(r.category_name ORDER BY r.category_name SEPARATOR " ") as category_name
FROM threads as t
INNER JOIN relations as r on t.thread_id = r.thread_id
GROUP BY r.thread_id;