Как лучше реализовать механизм «веса» значений в таблице БД?
Приветствую, немного сумбурно сабж озаглавил, поясню- имеется, скажем записи в бд:
PK name
1 test1
2 test2
5 test3
и тд
В штатном режиме я могу отобразить записи из таблицы, отсортировав их по главному ключу, либо имени, а как лучше реализовать такую схему, если я хочу, скажем, сначала вывести значение с pk = 5, после уже с 1 и 2? На ум приходит только создать отдельную таблицу с отношением 1 к 1, где будет храниться вес каждой записи и каждый раз, когда я захочу поменять местами записи делать перезапись этих самых ключей веса... Я в правильную сторону мыслю или для подобной цели есть более универсальные решения?
Для вывода pk=5 и потом 1, 2 попробуйте сделать запрос вида:
SELECT * FROM `table` ORDER BY (`pk` = 5 ) DESC, `pk`;
Вы не указали какая БД используется, в разных системах синтаксис запроса может немного отличаться, но как правило БД позволяют подобные вычисления в выражении сортировки.
mysql, через django... но подобным образом он выведет на раз, а если надо манипулировать, скажем, расставить в админке значения и сохранить для дальнейшего отображения?
Ska1n: если я правильно понял задачу, то я быпросто сделал доп. поле в этой же модели (без всяких one-to-one).
from django.db import models
class ExampleModel(models.Model):
order = PositiveIntegerField(blank=True, null=True)
class Meta:
ordering = ['order', 'pk']
Ну и дальше в админке (или как-либо ещё) заполнять этот order. При сортировке по-умолчанию сначала будут все записи по порядку с заполненным order, потом - все остальные с сортировкой по pk.