mysql :: рандомный 6ти символьный не повторяющийся ID

Тема в разделе "Базы данных", создана пользователем DOLARiON, 11 окт 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. DOLARiON

    DOLARiON

    Регистр.:
    4 сен 2006
    Сообщения:
    191
    Симпатии:
    48
    т.е.
    у меня есть некий ID некоего события, который юзер должен запоминать (записывать)

    он нужен НЕ порядковый + его надо записывать в базу

    вопрос: можно ли какнть средствами мускля поле ID сделать на автомате рандомным?

    когда их 10 000 таких - вопросов нет.. .сгенерить просто
    а когда у нас 999999 всего и из них 600000 занято... на генерацию может уйти туева хуча времени.......... и туева хуча циклов...

    под циклом я понимаю - генерим рандомные и проверяем... пока не попадется не заюзанный

    ЗЫ. хранится все это делао - 2 месяца, далее - чистим с датой > 2 месяцев
     
  2. elcaste

    elcaste

    Регистр.:
    30 ноя 2007
    Сообщения:
    322
    Симпатии:
    175
    Была похожая задача, но только не в миллионном масштабе. Решил так: создается таблица sometable с полями id(int, auto increment, key) и randoms(int), она заполняется(в твоем случае до 1кк) таким образом, что каждый уже занятый номер находится в строке с таким же id, все остальные(не занятые) заполняются нулями.

    Когда же нужно получить новый рандомный номер, то делаешь запрос вроде
    SELECT id FROM sometable WHERE randoms = 0 ORDER BY RAND() LIMIT 1.
    И после этого записываешь этот же номер в ту же строку в поле randoms.

    Когда записи чистятся, то делаешь наоборот.
     
    DOLARiON нравится это.
  3. DOLARiON

    DOLARiON

    Регистр.:
    4 сен 2006
    Сообщения:
    191
    Симпатии:
    48
    эээм... если я правильно понял:
    есть таблица в которой 999 999 записей состоящая из 2х колонок...

    к примеру:
    id, used

    id = 100 000 до 999 999 - ID-ки
    used = 0 или 1 - использовано ли это значение? да/нет

    выбираем рандомно где used = 0

    гениально и просто!!!
    спасиб! :)
     
  4. elcaste

    elcaste

    Регистр.:
    30 ноя 2007
    Сообщения:
    322
    Симпатии:
    175
    Да, все верно. Ты даже еще больше упростил решение. :) Рад, что помог.
     
Статус темы:
Закрыта.