Мне нужно получить количество записей в таблице "сообщения", где голосов >= 5 для создания разбивки на страницы.
таблицы:
table "posts": user_id, post_n, видимость, тип
значения видимости: 0, 1, 2; значения типа: "текст", "фото"... (это поле enum, имеет 6 значений)
таблица "голосов": vote_n, post_n, voter_id, голосовать
значения: -1 или 1
запрос:
SELECT post_n, (SELECT SUM(vote) FROM votes WHERE votes.post_n=posts.post_n)AS votes
FROM posts WHERE visibility=2 AND type='text' HAVING votes>=5
время 0.4039
Можно ли его оптимизировать?
Я думаю, что вы получите лучшие результаты без подзапроса. Вы можете сделать это, используя GROUP BY
:
SELECT p.post_n AS post_n, SUM(v.vote) AS votes
FROM posts p
INNER JOIN votes v ON (v.post_n = p.post_n)
WHERE p.visibility = 2 AND p.type = 'text'
GROUP BY p.post_n
HAVING SUM(v.vote) >= 5