powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация вложенных SELECT-ов
3 сообщений из 3, страница 1 из 1
Оптимизация вложенных SELECT-ов
    #38383077
gush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет!
Есть таблица блогов:

id | title | info

И таблица рейтингов:

id | table | row_id | rating

Чтобы выцепить все блоги вместе с их рейтингами выполняю следующий запрос:

Код: plsql
1.
2.
3.
4.
SELECT
     b.title, b.info,
     (SELECT ROUND(SUM(rating) / COUNT(*)) FROM ratings WHERE `table` = 'blogs' AND `row_id` = b.id) rating
FROM blogs b



Здесь всё отлично работает. Трудность возникла, когда понадобилось выцеплять не только рейтинг, но и кол-во проголосовавших. Ниже приведённый вариант по идее работает, но не нравится мне потому, что запрос одного и того же множества строк (с одинаковым условием WHERE) выполняется дважды:

Код: plsql
1.
2.
3.
4.
5.
SELECT
     b.title, b.info,
     (SELECT ROUND(SUM(rating) / COUNT(*)) FROM ratings WHERE `table` = 'blogs' AND `row_id` = b.id) rating
     (SELECT COUNT(*)) FROM ratings WHERE `table` = 'blogs' AND `row_id` = b.id) `count`
FROM blogs b



Можно ли как-то оптимизировать данный запрос? Например использовать JOIN?
Спасибо!
...
Рейтинг: 0 / 0
Оптимизация вложенных SELECT-ов
    #38383085
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gush
Код: plsql
1.
2.
3.
4.
5.
SELECT
     b.title, b.info,
     (SELECT ROUND(SUM(rating) / COUNT(*)) FROM ratings WHERE `table` = 'blogs' AND `row_id` = b.id) rating
     (SELECT COUNT(*)) FROM ratings WHERE `table` = 'blogs' AND `row_id` = b.id) `count`
FROM blogs b



Можно ли как-то оптимизировать данный запрос? Например использовать JOIN?
Спасибо!
так как-то
Код: sql
1.
2.
3.
4.
SELECT
     b.title, b.info, ROUND(SUM(rating) / COUNT(a.`row_id`)) as rating, COUNT(*) as `count` 
FROM blogs b left join ratings a on a.`row_id` = b.id and a.`table` = 'blogs'
group by b.title, b.info
...
Рейтинг: 0 / 0
Оптимизация вложенных SELECT-ов
    #38383111
gush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!
Работает :)
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация вложенных SELECT-ов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]