@DenisDangerous

Как оптимизировать запрос?

Можно ли как нибудь из подзапроса вытащить несколько полей? Left join ту использовать не получится. Упрощенный пример. Есть таблица релизов и есть таблица с "лайками"

releases:
id
name
publication_date
...и тп.

likes:
release_id
user_id

и вот мне в одном запросе мне надо вытащить данные релиза, а также кол-во лайков и всех пользователей кто лайкнул.
Как
SELECT GROUP_CONCAT(DISTINCT(`lr`.`user_id`)) AS users, COUNT(*) AS cnt FROM `likes_releases` `lr` WHERE `lr`.`release_id` = <ид релиза>
поместить внутрь
SELECT r.id, r.name, r.publication_date, <кол-во лайков и пользователи> FROM `releases` `r`
просто если обычным подзапросом делать придется дважды писать, тем самым дважды проходиться по таблице, ведь CONCAT (group_concat(),'-',COUNT(*)) не работает, вместо ожидаемого 4,12,53-3 мы получим blob
  • Вопрос задан
  • 106 просмотров
Пригласить эксперта
Ответы на вопрос 1
@dkuser
Разработчик
Наверное самый лучший вариант, сделать 2 запроса:
1)Получить список релизов: SELECT r.id, r.name, r.publication_date, <кол-во лайков и пользователи> FROM `releases` `r`
2) Получить отдельно лайки: SELECT GROUP_CONCAT(DISTINCT(`lr`.`user_id`)) AS users, COUNT(*) AS cnt FROM `likes_releases` `lr` WHERE `lr`.`release_id` in (Нужные релизы)
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы