Intereting Posts

множественное автоматическое приращение в mysql

Я использую 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 )