множественный автоматический прирост в MySQL - PullRequest
6 голосов
/ 17 августа 2011

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

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

По популярному запросу, некоторые дополнительные пояснения.

В административной области у пользователя будет список категорий.Используя javascript, пользователь может перетащить порядок, в котором они хотят категории. Затем сценарий публикует список всех идентификаторов в новом порядке и значения sort_order в старом порядке.

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

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

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

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

Ответы [ 5 ]

7 голосов
/ 17 августа 2011

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

select * 
from something
order by ifnull(sort, id)
1 голос
/ 17 августа 2011

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

1 голос
/ 17 августа 2011

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

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

0 голосов
/ 17 августа 2011

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

0 голосов
/ 17 августа 2011

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

...