Я использую php и mysql. У меня есть таблица с столбцом идентификатора, установленным для автоматического увеличения в качестве первичного ключа. Я пытаюсь добавить еще один столбец с именем sort_order. Столбец sort_order должен автоматически увеличиваться при вставке строки. Затем пользователь сможет изменить значение sort_order. Но mysql не позволяет автоматическое увеличение более чем для одного столбца?
Каков наилучший способ автоматического увеличения значения sort_order?
По популярному запросу, еще несколько объяснений.
В области администрирования пользователь будет иметь список категорий. Используя javascript, пользователь может перетащить заказ, в котором они хотят включить категории. Затем сценарий отправляет список всех идентификаторов в новом порядке и значения sort_order в старом порядке.
Затем у меня есть функция php, которая обновляет mysql с новым значением sort_order.
Все это уже сделано, за исключением того, что я вручную заполнил все значения sort_order. Я хочу, чтобы он мог иметь значение, когда пользователь создает новую категорию.
Затем я могу использовать sort_order, чтобы правильно отобразить порядок категорий на лицевой стороне.
У меня все уже сделано. Но в разработке я вручную заполнил значения для sort_order.
Вы можете использовать триггер, cf http://dev.mysql.com/doc/refman/5.1/de/create-trigger.html
По умолчанию вы можете оставить столбец сортировки равным NULL. Единственное, что вам нужно, это немного более разумный запрос. Например:
select * from something order by ifnull(sort, id)
Вы можете использовать триггер для обновления строки при вставке или выбрать соответствующее значение в вашем PHP-коде на момент создания запроса.
Однако вы должны подумать о том, действительно ли вам нужно создать значение auto_ incrementing sort_order. В вашем отображаемом коде вы можете сортировать элементы, которым был задан явный порядок сортировки, и поместить оставшиеся несортированные элементы в соответствующее место (внизу?) В списке.
Возможно, добавьте временную метку и отсортируйте ее, что фактически добавит смысл вашей модели данных. Столбец «sort_order» означает, что вы вводите логику представления (представления) в свою модель данных, которая является плохим.
Вы можете сохранить 0 в sort_order, а затем отсортировать по sort_order + id
. Результаты будут такими же, потому что sort_order
будет точным 0 вместо id
(меньше на id
)