несколько автоинкремент в 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
)