Вопрос по нумерации.

trompert

Guest
Вопрос по нумерации.

Не могу сообразить как это сделать лучше...
Есть галерея картинок. Они должны идти в том порядке как я захочу, и можно быо менять этот порядок.
Я представляю, что надо пронумеровать их все (автоматически) 1,2,3 и тп, потом просто менять число и сортировать по такому индексу. но.. как избежать дублей? если будет вместо 1,2,3 - 1,2,2 - так же не годится...
как сделать лучше?
 

tony2001

TeaM PHPClub
завести поле "порядок сортировки" и не трогать первичный ключ.
он не для сортировки создан.
а поле меняй уже как хочешь.
 

trompert

Guest
все верно, но я хочу чтобы сортировалось как раз по "порядку сортировки". но чтобы в этом поле все значения были разные.. может есть функция в MySQL чтобы автоматически все значения выстраивались по порядку?
 

.des.

Поставил пиво кому надо ;-)
trompert какая функция ты вообще о чем?
в SQL - ORDER BY называется...
а если по порядку чтобы значения то это auto_increment как свойство поля при создании.
 

tony2001

TeaM PHPClub
>я хочу чтобы сортировалось как раз по "порядку сортировки"
я хочу масло из масла.

объясни что ты хочешь.
только попробуй сначала сделать как я сказал.
 

Vinny

Guest
Для этого придется повозиться и написать код, которы будет проверять на дубли. Алгоритм получается совсем несложный, подумай :)
 

trompert

Guest
В общем задача свелась к тому:
Получаем значение, сравниваем его со всеми остальными в колонке.
Находим дубль, и запоминаем его id.
делаем update pictures set sortirovka='+1' where id>$id.
Во! сам допер! :))
Жаль что нет функции в MySQL чтоб сама все делала.. :)
 

.des.

Поставил пиво кому надо ;-)
Получаем значение, сравниваем его со всеми остальными в колонке.
Находим дубль, и запоминаем его id.
Вот эту часть мне кажется что то ты там делаешь ну совсем неправильно.
Что значит сравниваешь со всем остальными? а почему бы сразу максимальный не выбрать?
 

trompert

Guest
2 .des. - а зачем максимальный? смотри, у нас ряд 1,2,3,4,5..
заменяем 5 на 3. (для того чтобы последняя картинка у нас шла третьей - это ж для галереи первоначально). следовательно нам надо увеличить все остальные (3,4,5) на один чтобы дублей не было. при чем тут максимальный?
а сравнивать наверное с помощью select id where nomer='$nom'. так мы id получим.
или я не прав?
 

Demiurg

Guest
trompert поставь уникальный ключь на поле сортировки.
 

trompert

Guest
2Demiurg - ставил - тогда он не дает его изменить.
 

Vinny

Guest
Эх... Опять выскажусь...

При добавлении новой записи:
1. Если order не указан, выбираем max(order) и прибавляем к нему 1.
2. Если order указан.
2.1. Выбираем max(order).
2.2. Если order>max(order), order=max(order) + 1.
2.3. Если order<max(order), проверям, есть-ли order с указанным значением.
2.4. Если есть, то делаем update table set order=order+1 where order>=$order, а потом insert into table values(..., $order).

При удалении:
1. Если order=max(order), просто удаляем.
2. Если order<max(order), удаляем запись и делаем update table set order=order-1 where order>$order

При изменении, все то же самое, что и при добавлении.

Может написал несколько коряво, но суть должна быть ясна, имхо... :)
 

trompert

Guest
2Vinny я в принципе так и сделал, только у меня добавляются сразу по 20 картинок, так что order при добавлении автоматич. заполняется. а вот при изменении позиции - идет как раз пункт 2.4. :)
спасибо!
 
Сверху