Получить комментарии и их оценки можно в одном SQL-запросе. Это будет медленно, когда у вас будет много комментариев и оценок, но не для чисел, которые вы упоминаете.
Если вы хотите сделать это быстрее, вы можете создать в комментариях атрибут с именем «рейтинг» или что-то в этом роде и обновлять его каждый час (или как часто, по вашему мнению, этого будет достаточно) или около того. Это не будет точно, но это будет приближать комментирование. Но мы говорим миллионы комментариев и оценок здесь, прежде чем это необходимо.
Обычно это делается с материализованным представлением, но, к сожалению, оно не реализовано в MySQL ... Вы можете использовать описанный выше метод, написав php-скрипт и выполнив его через cronjob.
Используйте такой запрос (не проверено):
SELECT *
FROM comments, ratings
WHERE comments.id = ratings.id_comment;
при условии, что вы добавили значение к своим голосам (+1 или -1), вы можете сгруппировать их и рассчитать общее количество комментариев в одном запросе, например, так: (не проверено):
SELECT comments.id, comments.user_id, comments.comment,
comments_time, SUM(ratings.value) AS rating
FROM comments, ratings
WHERE comments.id = ratings.id_comment
GROUP BY comments.id;
Теперь у вас будут все поля комментариев и вычисленное комментирование в виде поля rating
. Если вы хотите ускорить его тестирование, попробуйте вставить миллион фиктивных комментариев и миллион оценок и посмотреть, сколько времени займет запрос.
Для еще большего ускорения вы можете добавить индекс для comments.id_comment, например так:
CREATE INDEX speedthisthingup ON comments(id_comment);
Это должно сильно помочь времени выполнения:)
Удачи!