Держите votes
таблицу. Например. голосов (comment_id, user_id, значение, штамп) - значение -1 или + 1.
Это позволяет подотчетность, и вы можете сделать индекс UNIQUE для (comment_id, user_id), чтобы предотвратить повторное голосование. Вы также можете легко удалить пользователя и все его голоса, если он / она рассылает спам.
Для сортировки комментариев по баллам можно выполнить СОЕДИНЕНИЕ между таблицами комментариев и голосования и использовать SUM / GROUP BY, чтобы получить общий балл. Однако это может быть медленным. Для скорости вы можете также рассмотреть возможность сохранения поля оценки в таблице комментариев. Каждый раз, когда в таблицу голосов добавляется новая строка, вы добавляете / вычитаете 1 из оценки комментария.
Поскольку вы сохраняете каждый голос в таблице, легко пересчитать счет по требованию. Переполнение стека делает то же самое с репутацией - общий рейтинг репутации для пользователя кешируется и пересчитывается очень часто.