Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: ID 'по кругу'
 
 автор: Roma   (27.03.2008 в 15:11)   письмо автору
 
 

привет всем.
к примеру, есть сайт новостей 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

правильно ли это? может есть более рациональный способ?

   
 
 автор: ronin80   (27.03.2008 в 15:17)   письмо автору
 
   для: Roma   (27.03.2008 в 15:11)
 

а как понять что id свободный?

   
 
 автор: Roma   (27.03.2008 в 15:26)   письмо автору
 
   для: 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')

   
 
 автор: ronin80   (27.03.2008 в 15:48)   письмо автору
 
   для: Roma   (27.03.2008 в 15:26)
 

а зачем такие заморочки, почему тебя волнует размер поля id?

обычно никто не парится по поводу ключевого поля, autoincrement и кирдык

   
 
 автор: Roma   (27.03.2008 в 16:00)   письмо автору
 
   для: ronin80   (27.03.2008 в 15:48)
 

меня-то оно не волнует...
а вот есть человек, имя которого "заказчик", так он не хочет больших циферек в конце адреса. поэтмоу я и страшиваю

   
 
 автор: ronin80   (27.03.2008 в 16:09)   письмо автору
 
   для: Roma   (27.03.2008 в 16:00)
 

тут надо подумать

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

например создай триггер на удаление записи из твоей таблицы который будет втыкать номер id в таблицу со свободными номерами

   
 
 автор: Roma   (27.03.2008 в 16:14)   письмо автору
 
   для: ronin80   (27.03.2008 в 16:09)
 

идея хорошая, спасибо за совет,буду пробовать

   
 
 автор: mtxd   (27.03.2008 в 18:04)   письмо автору
 
   для: Roma   (27.03.2008 в 16:14)
 

Или проще, без дополнительной таблицы.
Берешь список id из таблицы со статьями, заносишь в массив (например 1,2,3,5,6,9). Создаешь ещё один массив с параметрами от минимального до максимального (1,2,3,4,5,6,7,8,9). Вычитаешь из второго первое, получаешь массив со свободными, из которого берешь любое знаечение. Если массив пуст, тогда max+1

   
 
 автор: ronin80   (27.03.2008 в 22:15)   письмо автору
 
   для: mtxd   (27.03.2008 в 18:04)
 

ага, представь таких записей в таблице миллион, какой тогда массив получается. тут я думаю ни один сервак не справится с такой нагрузкой

а так нужно будет только отбирать минимальное свободное значение из таблицы и втыкать его, ну соответственно продумать удаление/добавление записей

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования