несколько автоинкремент в MySQL

Я использую php и mysql. У меня есть таблица с столбцом id, установленным на auto increment в качестве первичного ключа. Я пытаюсь добавить еще один столбец под названием порядок_сортировки. Столбец sort_order должен автоматически увеличиваться при вставке строки. Затем пользователь сможет изменить значение порядок_сортировки. Но mysql не позволяет автоматическое приращение для более чем одного столбца?

каков наилучший способ автоматического увеличения значения sort_order?

по популярному запросу, еще несколько объяснение.

в области администрирования у пользователя будет список категорий. С помощью JavaScript пользователь может перетащить ее категории. Затем скрипт публикует список всех идентификаторов в новом порядке и значения sort_order в старом порядке.

У меня тогда есть функция php, которая обновляет mysql с новым значением sort_order.

все это уже сделано, за исключением того, что я вручную заполнил все значения sort_order. Я хочу этого. возможность иметь значение, когда пользователь создает новую категорию.

затем я могу использовать sort_order для правильного отображения порядка категорий на передней панели.

Я уже все сделал. Но в разработке я вручную заполнил значения для sort_order.

5 ответов


вы можете использовать триггер, cf http://dev.mysql.com/doc/refman/5.1/de/create-trigger.html


вы можете оставить свой вроде столбец по умолчанию равен NULL. Единственное, что вам нужно, это немного умнее запроса. Например:

select * 
from something
order by ifnull(sort, id)

можно использовать триггер чтобы обновить строку после вставки или выбрать соответствующее значение в PHP-коде во время создания запроса.

однако, вы должны рассмотреть, действительно ли вам нужно создать автоматически увеличивающееся значение sort_order. В коде отображения можно отсортировать элементы, которым был задан явный порядок сортировки, и поместить оставшиеся несортированные элементы в соответствующее место (внизу?) в списке.


возможно, добавьте метку времени и отсортируйте ее, что на самом деле добавляет смысл вашей модели данных. Столбец "sort_order" означает, что вы помещаете логику представления (представления) в свою модель данных, что плохо.


вы можете хранить 0 в sort_order, а затем сортировать по sort_order + id. Результаты будут такими же, потому что sort_order будет точным 0 вместо id ( меньше на id)