PHP-MYSQL оценивает комментарии - PullRequest
0 голосов
/ 12 октября 2011

У меня есть вопрос, вероятно, вы посчитаете это глупым, но в любом случае

, делая комментарии в php, я подумал, что было бы здорово, если бы люди могли оценить комментарий с + 1 / -1, поэтому я сделал одну таблицув БД для комментариев (id, user_id, comment, time) и еще один для рейтинговых комментариев (id_rate, id_comment, id_user, time) я использую id_user, чтобы он не мог оценивать два раза один и тот же комментарий

проблема в следующем: если сообщение в блоге содержит около 100 комментариев, а в каждом - около 200 голосов (+1 или -1), страница не будет слишком медленной для загрузки, много-много запросов просто для загрузки несколькихкомментарии?

это еще один способ сделать это, следуя обычным формам БД?

Спасибо за ваше время, я действительно ценю это.

Ответы [ 2 ]

1 голос
/ 12 октября 2011

Получить комментарии и их оценки можно в одном 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);

Это должно сильно помочь времени выполнения:)

Удачи!

0 голосов
/ 12 октября 2011

Вы можете кэшировать текущий голос за комментарий в таблице comments с помощью другого поля с именем commentvote. В противном случае проверка таблицы комментариев рейтинга, чтобы убедиться, что пользователь еще не проголосовал, должна быть относительно быстрой с соответствующими индексами.

...