|
|
|
| привет всем.
к примеру, есть сайт новостей www.news.com
имеется возможность переходить www.news.com/ID_новости
не очень хотелось бы,чтобы число (ID_новости) было 5- или 6-значное
как сделать так, чтобы номер брался так:
если имеется свободный ID (меньше максимального), то присваивается этот ID, а если свободного нет, то макс+1
Есть вариант сделать так:
insert into test values(1,'msg') ON DUPLICATE KEY UPDATE id=id+1
|
правильно ли это? может есть более рациональный способ? | |
|
|
|
|
|
|
|
для: Roma
(27.03.2008 в 15:11)
| | а как понять что id свободный? | |
|
|
|
|
|
|
|
для: ronin80
(27.03.2008 в 15:17)
| | то есть так:
имеются записи:
ID mes
1 f1
2 f2
3 f3
4 f4
Допустим удалили элемент с ID=2. Теперь остаются:
ID mes
1 f1
3 f3
4 f4
Теперь при добавлении можно добавить
insert into test values (2,'msg')
|
| |
|
|
|
|
|
|
|
для: Roma
(27.03.2008 в 15:26)
| | а зачем такие заморочки, почему тебя волнует размер поля id?
обычно никто не парится по поводу ключевого поля, autoincrement и кирдык | |
|
|
|
|
|
|
|
для: ronin80
(27.03.2008 в 15:48)
| | меня-то оно не волнует...
а вот есть человек, имя которого "заказчик", так он не хочет больших циферек в конце адреса. поэтмоу я и страшиваю | |
|
|
|
|
|
|
|
для: Roma
(27.03.2008 в 16:00)
| | тут надо подумать
может создать табличку из одного поля в котором будут сохраняться номера удаляемых сообщений, из которой и будешь черпать свободные номера
например создай триггер на удаление записи из твоей таблицы который будет втыкать номер id в таблицу со свободными номерами | |
|
|
|
|
|
|
|
для: ronin80
(27.03.2008 в 16:09)
| | идея хорошая, спасибо за совет,буду пробовать | |
|
|
|
|
|
|
|
для: Roma
(27.03.2008 в 16:14)
| | Или проще, без дополнительной таблицы.
Берешь список id из таблицы со статьями, заносишь в массив (например 1,2,3,5,6,9). Создаешь ещё один массив с параметрами от минимального до максимального (1,2,3,4,5,6,7,8,9). Вычитаешь из второго первое, получаешь массив со свободными, из которого берешь любое знаечение. Если массив пуст, тогда max+1 | |
|
|
|
|
|
|
|
для: mtxd
(27.03.2008 в 18:04)
| | ага, представь таких записей в таблице миллион, какой тогда массив получается. тут я думаю ни один сервак не справится с такой нагрузкой
а так нужно будет только отбирать минимальное свободное значение из таблицы и втыкать его, ну соответственно продумать удаление/добавление записей | |
|
|
|