2010-09-20 3 views
0

Мне нужно получить число записей «Сообщения», где голосов> = 5, чтобы создать разбивку на страницы.Количество записей в MySQL с условием

столы:

стол «Сообщения»: user_id, post_n, видимость, тип

видимость значения: 0, 1, 2; Значения типа: 'текст', 'фото' ... (Оно `s перечисление поле, имеет 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

можно ли оптимизировать его?

ответ

0

Я думаю, что вы получите лучшие результаты без подзапроса. Вы можете сделать это, используя 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 
+0

Я пробовал, время: 1.4446 – swamprunner7

Смежные вопросы