#sql #django
#sql #django
Вопрос:
Я хочу рассчитать популярность вопроса в системе контроля качества, один вопрос имеет несколько голосов, несколько ответов, несколько комментариев, и каждый ответ имеет несколько голосов и несколько комментариев. Популярность должна быть такой:
popularity=count(Question.Votes) count(Question.Answers) count(Question.Comments) (for an_answer in Question.Answers:sum =count(an_answer.Votes) count(an_answer.Comments))
Результат должен быть примерно таким: SELECT *, popularity FROM Question ORDER BY popularity
.
Кроме того, я делаю это в django, задаваясь вопросом, есть ли более элегантный способ сделать это, кроме использования extra() ?
Комментарии:
1. Я думаю, что очень неэффективно вычислять популярность с каждым кликом. Вставьте столбец с популярностью и пересчитайте его при обновлениях базы данных.
2. Пожалуйста, предоставьте пример набора записей, чтобы мы понимали схему и данные.
3. Я согласен с Эриком. Его совет еще более важен, если система в основном доступна только для чтения, что означает, что количество раз, когда кто-то просматривает вопрос, намного больше, чем количество раз, когда кто-то ответит / проголосует / прокомментирует вопрос.
4. Это звучит очень разумно! Я думаю, что, вероятно, лучше добавить несколько дополнительных столбцов для вопроса: Number_of_Votes, Number_of_Comments и Популярность (все они используются в разных местах) и вычислять их при изменении соответствующих данных. Просто интересно, нарушает ли это определенные правила, поскольку данные «дублируются» и имеют множественную зависимость?
5. data.stackexchange.com имеет несколько хороших примеров запросов для системы контроля качества. Хех.