dzheka3d
@dzheka3d

Как использовать ассоциации в запросе?

Всем привет! Имеется запрос (не вникайте в назначение этого запроса, написал просто для примера):
SELECT `posts`.`title`, 
      (SELECT count(`id`) FROM `likes` WHERE `post_id` = `posts`.`id`) likes,
      (`posts`.`num` + likes) sum_likes 
   FROM `posts` 
   ORDER BY sum_likes DESC


Смысл в том, что мне нужно получить значения количество лайков поста, сложить его с неким числом и отсортировать по получившемуся значению. Проблема в том, что я получаю ошибку "поле likes не существует".

Вопрос, конечно, решается если вместо likes поставить сам подзапрос, но мне нужно также и значение likes и сумма с ним
  • Вопрос задан
  • 161 просмотр
Пригласить эксперта
Ответы на вопрос 2
Stimulate
@Stimulate
могу
SELECT `posts`.`title`, 
      (SELECT count(`id`) FROM `likes` WHERE `post_id` = `posts`.`id`) AS likes,
      (`posts`.`num` + likes) AS sum_likes 
   FROM `posts` 
   ORDER BY sum_likes DESC
не?
Ответ написан
@BorisKorobkov Куратор тега MySQL
Web developer
Вариант 1 (очень неэффективный, ибо будет N+1 запросов):
SELECT title, likes, (num + likes) AS sum_likes FROM
(SELECT title, ... AS likes FROM posts) t
ORDER BY sum_likes DESC


Вариант 2:
SELECT posts.title, likes.cnt, posts.num + likes.cnt AS sum_likes
FROM posts
LEFT JOIN
   (SELECT post_id, COUNT(id) as cnt FROM likes GROUP BY post_id) likes
   ON posts.id = likes.post_id
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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