Просто отсортируйся по рейтингу! Этот подход просто неверен, так как вам придется сдвигать изменения всех данных выше определенного ранга, если вы что-то вставляете. Плохая структура данных.
Ну, если вы только что-то вставляете что-то один или два раза в год, вы можете утверждать, что целая сортировка выполняется быстрее, но это очень просто, поскольку сортировка основана на индексах дерева, а не на сравнении.
Итак, я видел решения, подобные Andrew G. Johnson's. Вы также можете настроить это и обновить записи с более высокой оценкой. Вы также можете создать триггер, который сделает это автоматически для вас.
Но позвольте мне объяснить, почему это не так:
Своих избыточных данных. Его не атомный и согласованный. В хорошем дизайне atabase вы всегда должны (если возможно) хранить каждую информацию только в одной точке, чтобы ее можно было модифицировать, удалить атомарным способом. Таким образом, вы можете избежать любых несоответствий и осложнений в первую очередь. Если вы действительно хотите «кешировать» рейтинг, сделайте это в своем приложении.
Итак, каковы ваши альтернативы этому, если вы действительно хотите, чтобы поля базы данных назывались так?
Создайте mysql view на основе отсортированного запроса. Вы также можете сделать кеширование там AFAIK, если это ваша цель.
Но лучшим вариантом для кэширования было бы просто позволить кешу запросов mysql выполнить эту работу за вас. Это был бы самый лучший вариант.
Я не вижу причин, почему так делать то, что вы пытаетесь сделать, только действительные аргументы против него.
Зачем вам хранить расчетные позиции внутри таблицы в любом случае? –
Мне нужны эти данные в разных местах моего сайта, включая рейтинги, информацию о компании и т. Д. Есть ли лучший способ хранить данные такого типа? – Anthony
Я просто хочу отметить, что если ваша RDBMS может использовать функции окна, вы можете использовать «RANK OVER (ORDER BY rating_score DESC)» для получения ранга. Он не будет работать с MySQL, хотя :-( –