Задать вопрос
@Anonymous12344321

Как в одном запросе получить данные из одной таблицы и количество строк из другой?

Есть сайт, представляющий собой форум, в котором люди могут задавать вопросы. На странице с вопросом каждому ответу можно ставить лайк. Для работы этой системы существуют две таблицы в базе данных, answers и likes. Их архитектура такова:
611b82bb7292d654859946.png
611b82c484372240447185.png

Система работает так, что на каждой странице с вопросом отправляется ajax запрос в файл printAnswers.php. В этом файле при помощи функции printAnswers из определенного класса происходит печать ответов. Данная функция извлекает данные из таблицы answers, нужные для вывода вопроса(получает ссылку на изображение пользователя, давшего ответ, его имя и тд и тп) и далее при помощи функции generateAnswerShell(userId, img_link и тд) формирует оболочку ответа(эта функция просто генерирует html код с пользовательскими данными). Главной проблемой здесь является получение количества лайков для определенного ответа. Я пытался решить проблему таким образом, чтобы в printAnswers отправлять второй sql запрос в таблицу likes и просто выводить количество ячеек, где идентификатор ответа совпадал с идентификатором ответа, отправленного в запросе при помощи COUNT(*), но это значительно усложняет работу, тк в 1 методе нужно отправлять по два запроса. Можно ли организовать ячейку Likes в таблице answers, чтобы подсчет происходил автоматически уже в базе данных? Что-то по типу этого, только я не знаю, какой правильный синтаксис:
ALTER TABLE answers ADD LIKES = COUNT(*) IN likes WHERE answers.userID=likes.userID;
  • Вопрос задан
  • 168 просмотров
Подписаться 2 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
SELECT answers.*, count(*) as cnt
FROM answers
LEFT JOIN likes ON likes.answerID = answer.id
GROUP BY answer.id
Ответ написан
rozhnev
@rozhnev Куратор тега MySQL
Fullstack programmer, DBA, медленно, дорого
SELECT 
    answers.*,  IFNULL(likes_count, 0) as likes_count
FROM answers
LEFT JOIN (
   SELECT answerID, count(*) as likes_count FROM likes GROUP BY answerID
) likes_count ON likes_count.answerID = answer.id
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы