Forum Webscript.Ru

Общие => Базы данных => Тема начата: Sniper от 22 Декабря 2002, 16:31:04

Название: Присвоение новых ИД
Отправлено: Sniper от 22 Декабря 2002, 16:31:04
У меня есть MYSQL таблица,  вней несколько записей.
У каждой записи есть поле с автоинкрементным ИД.

Проблема: Если удалить какую-нибудь из записей.
То с номерами ИД получается некрасиво: номера не подряд идут. То есть если удалили запись с ИД = \'5\' , то в таблице не будет этого ИД. А мне надо подряд, потому как скрипт у меня есть, к-ры выбирает случайное число из диапазона, где диапазон - количество записей в таблице. Если некоторых ИД не будет, то скрипт ничесго не выберет.

Возможно ли после удаления записи как нибудь пересортировывать ИД. Чтобы они были подряд.
Название: Присвоение новых ИД
Отправлено: fidget от 22 Декабря 2002, 17:44:49
> Возможно ли после удаления записи как нибудь пересортировывать ИД. Чтобы они были подряд.

Не думаю что есть в этом большая необходимость. ИД генерится уникальным и нужен только для того, что бы идентифицировать запись в таблице. Красиво или не красиво тут никаким боком лежать не должно. А если тебе красиво записи потом из таблицы вывести нужно, то это делай с помощью своего скрипта/программы и т.д.
Название: Присвоение новых ИД
Отправлено: Sniper от 23 Декабря 2002, 11:07:53
fidget
Если бы ты внимательно прочел вопрос, то, возможно, понял бы зачем мне это нужно.

Цитировать
Если некоторых ИД не будет, то скрипт ничесго не выберет.
Название: Присвоение новых ИД
Отправлено: Metaller от 23 Декабря 2002, 11:16:45
Цитировать
fidget
Если бы ты внимательно прочел вопрос, то, возможно, понял бы зачем мне это нужно.

Вообще-то, Fidget - "она". Это раз.


А во-вторых - надо писать нормально скрипты и учить SQL - тогда таких вопросов не возникнет.
Название: Присвоение новых ИД
Отправлено: ThE0ReTiC от 23 Декабря 2002, 12:10:34
Sniper
Можно. Только это идиотизм - использовать автоинкрементное поле для упорядоченной выборки.
А количество записей в таблице можно получить вообще не отталкиваясь от последнего значения ID.
Да и задачка твоя решается без использования упорядоченного списка всего двумя запросами к базе.
Задачка-то для решения в уме :)
[off]Ничего личного[/off]
Название: Присвоение новых ИД
Отправлено: Sniper от 23 Декабря 2002, 13:13:45
fidget - Sorry!
Цитировать
Вообще-то, Fidget - "она". Это раз




Цитировать
Да и задачка твоя решается без использования упорядоченного списка всего двумя запросами к базе.

А можно подробнее?Metaller




Metaller
Так для того я сдесь и задаю вопросы - чтобы научиться "нормально" скрипты писать.
Название: Присвоение новых ИД
Отправлено: Metaller от 23 Декабря 2002, 13:17:51
Если тебе нужно число записей - то
SELECT COUNT(*) as ChisloZapisey FROM tralala

Если нужно выбрать случайную запись -
SELECT * FROM tralala ORDER BY RAND() LIMIT 1
Название: Присвоение новых ИД
Отправлено: ThE0ReTiC от 23 Декабря 2002, 13:22:18

SELECT COUNT(id) FROM tablename;

Потом выбираешь случайное число из диапазона 1..COUNT(id)
Второй запрос:

SELECT * FROM tablename ORDER BY id ASC LIMIT <полученное число>,1

Вот так, например.
Как один из вариантов.
У меня эта конструкция работает нормально.
Название: Присвоение новых ИД
Отправлено: Sniper от 23 Декабря 2002, 17:43:58
Спасибки!
Название: Присвоение новых ИД
Отправлено: Alexandr от 24 Декабря 2002, 08:06:56
ThE0ReTiC, твоя штука работать не будет...
Sniper, я тож бился над этой проблемой смотри
http://forums.webscript.ru/showthread.php?s=&threadid=7740&highlight=%E2%FB%E1%F0%E0%F2%FC+%F1%EB%F3%F7%2A
Название: Присвоение новых ИД
Отправлено: ThE0ReTiC от 24 Декабря 2002, 11:49:04
Alexandr
А тебе больше скажу - она (штука) во всю работает, так что твое заявление несколько опрометчиво :)
Название: Присвоение новых ИД
Отправлено: Alexandr от 24 Декабря 2002, 12:33:28
Да, точно.
Попутал малость.