Ниже таблицы создания операторов находится SQL, который я бы использовал. Вы также можете использовать временную таблицу или предложение WITH.
CREATE TABLE question (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
content varchar(255)
);
CREATE TABLE answer (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
question_id INT(6),
user_id INT(6) UNSIGNED,
content varchar(255)
);
CREATE TABLE reaction (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
question_id INT(6),
user_id INT(6) UNSIGNED
)
SELECT Q1.content, Q1.countAns, Q2.countReact
FROM
( select q.*, count(r.user_id) countAns
from question q
left join reaction r on q.id = r.question_id
group by q.id, q.content ) Q1
JOIN
( select q.*, count(r.user_id) countReact from question q left join answer r on q.id = r.question_id group by q.id, q.content ) Q2
on Q1.id = Q2.id;