powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Рандомный автоиндекс
49 сообщений из 49, показаны все 2 страниц
Рандомный автоиндекс
    #39060644
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пусть есть таблица

Код: sql
1.
create table t (id int not null, primary key (id));



При этом логика нашего клиентского приложения предполагает хранение в этой таблице айдишников, которые больше 100000 и меньше 999999, то есть всегда шестизнак.

В данный момент, при вставке записи мы генерим рандомное число, проверяем существует ли такая запись, если не существует, то создаем запись, если существует, то генерим новое число. В этом цикле защита на 10 тыс. попыток. Если так и не удалось, то типа, сорри, не судьба...

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

Вопрос: может есть какие-то секретные шняжки для решения подобной задачи?
Типа как бы аналог auto_increment, только типа как бы типа такого

Код: sql
1.
create table t (id int not null auto_random_value(100000, 999999), primary key (id));
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39060646
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а надо "настоящий" ранодом или и псевдо устроит?
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39060649
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
генерить рандомное число, выбирать первое несуществующее больше него.
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39060653
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowгенерить рандомное число, выбирать первое несуществующее больше него.так со временем образуются заполненные интервалы
я почему и спрашиваю ТСа о допустимости псевдослучайности
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39060655
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirа надо "настоящий" ранодом или и псевдо устроит?

вопрос не понятен....
прошу уточнить...

ScareCrowгенерить рандомное число, выбирать первое несуществующее больше него.

а каким запросом узнать первое несуществующее число больше 463504?
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39060663
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
select min(t1.id)
from tbl t1
join tbl t2 on t1.id=t2.id-1
where t1.id>463504 and t2.id is null
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39060689
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir
Код: sql
1.
2.
3.
4.
select min(t1.id)
from tbl t1
join tbl t2 on t1.id=t2.id-1
where t1.id>463504 and t2.id is null



Благодарю!

Тут ещё ограничитель сверху до кучи

Код: sql
1.
2.
3.
select min(t1.id) nextId 
    from tbl a join tbl b on a.id = b.id - 1
    where a.id > 463504 and a.id < 999999 and b.id is null



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

PS. кстати, а просто для общего развития, что имелось ввиду под настоящий или псевдо-рандом?
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39060694
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если действовать только средствами MySQL, то я бы заготовил заранее перемешанную таблицу на нужное количество записей. Перемешать можно с помощью ORDER BY RAND(). Это очень не быстро, но для разового выполнения сойдет.
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39060721
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftЕсли действовать только средствами MySQL, то я бы заготовил заранее перемешанную таблицу на нужное количество записей. Перемешать можно с помощью ORDER BY RAND(). Это очень не быстро, но для разового выполнения сойдет.

ОООО!!! Идея прикольная, тем более в данном случае мы точно знаем, что записей у нас всего 899999.

1) Для меня это новая идея, что создание некой новой сущности в системе - это не insert + update, а такая разновидность update, которая скидывает флаг "isBlank" в ноль....

правда теперь придется обмозговать какие это внесет дополнения в стиль работы
например, теперь вместо select * from t придется делать select * from t where isBlank = false просто для того чтобы узнать количество записей

2) order by rand() тут наверное лишний, потому что для создания такой таблицы лучше на клиенте создать массив и перемешать его, а затем уже проинсертить все 899999 пар (id, seqId) и для активации ("создания") новой записи просто искать минимальный seqId с флагом isBlank = true
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39060730
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix1) Для меня это новая идея, что создание некой новой сущности в системе - это не insert + update, а такая разновидность update, которая скидывает флаг "isBlank" в ноль....Можно и так. А можно просто удалять из таблицы использованные значения.
Lumix2) order by rand() тут наверное лишний, потому что для создания такой таблицы лучше на клиенте создать массив и перемешать его, а затем уже проинсертить все 899999 пар (id, seqId) и для активации ("создания") новой записи просто искать минимальный seqId с флагом isBlank = trueorder by rand() позволяет всю подготовку выполнить средствами MySQLбуквально в пару-тройку команд. Конечно, можно то же самое сделать и на клиенте, но кодить придется чуток побольше.

Кстати, а зачем тут поле id? не вижу в нем необходимости.
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39060741
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftМожно и так. А можно просто удалять из таблицы использованные значения.

miksoftКстати, а зачем тут поле id? не вижу в нем необходимости.

может я опять криво объяснил с самого начала
ситуация такая

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

Код: sql
1.
create animals (id int primary key auto_increment, type char(32), name text, country text, manager_userId)



все круто, все как обычно...
но в этой задаче номер животного может быть только [100000, 999999), то есть только шестизначным числом (это полбеды, ведь можно было бы просто прокрутить auto_increment до 100000 и поехали... в этой задаче важно новым животным присваивать номера случайным образом

поступила например лошадь
Код: sql
1.
insert into animals value (null, 'horse', 'Сивка', 'Афганистан', 7504)



только вместо null нам важно присвоить какой-то случайный номер из диапазона [100000, 999999) и чтобы этого номера ещё не было бы в этой таблице

вот в чем ситуация...

поэтому я думал вы предлагаете сразу в этой таблице создать 8999999 животных, у которых id будет распределен случайно, а вот seqId будет последовательным и когда мы хотим занести в таблицу новое животное мы будем брать запись по номеру seqId (минимальный номер у которого флаг isBlank = true), затем по этому номеру получать id (который и является уже заранее занесенным случайным числом, затем скидываем флаг isBlank в false и по этому id прописываем все данные на новое животное

я думал вы именно такой вариант предлагаете...
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39060745
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixtanglir
Код: sql
1.
2.
3.
4.
select min(t1.id)
from tbl t1
join tbl t2 on t1.id=t2.id-1
where t1.id>463504 and t2.id is null



Благодарю!

Тут ещё ограничитель сверху до кучи

Код: sql
1.
2.
3.
select min(t1.id) nextId 
    from tbl a join tbl b on a.id = b.id - 1
    where a.id > 463504 and a.id < 999999 and b.id is null



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

PS. кстати, а просто для общего развития, что имелось ввиду под настоящий или псевдо-рандом?



не существует таких средств. поедите всего потому что они никому не нужны.

ключ должен быть уникальным, больше на него не надо накладывать никаких ограничений.

если ты делаешь ключ случайным, то ты навязываешь ему дополнительно еще какую то семантику помимо идентификации записи, а этого ключи не должны делать.
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39060749
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixпоэтому я думал вы предлагаете сразу в этой таблице создать 8999999 животныхТак тоже можно, наверное, но зависит от задачи.
Но я предлагал сделать отдельную табличку-генератор только из одних номеров. И черпать их оттуда по мере необходимости.
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39060763
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft, ок, теперь понятно.

Код: sql
1.
2.
{nextId} = select id from random_id_list order by rand() limit 1;
delete from random_id_list where id = {nextId}
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39060768
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixmiksoft, ок, теперь понятно.

Код: sql
1.
2.
{nextId} = select id from random_id_list order by rand() limit 1;
delete from random_id_list where id = {nextId}

Нет, тут уже order by rand() не нужен. Перемешивание должно было быть сделано один раз на этапе создания таблицы. Только поле id не надо делать первичным ключом, а то InnoDB записи отсортирует.
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39060843
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixв этой задаче важно новым животным присваивать номера случайным образом
Так мы увидим обоснование того, что ID должен быть СЛУЧАЙНЫМ?

С точки зрения логики, надо взять фразу
Lumixid будет распределен случайно, а вот seqId будет последовательным
и сделать строго наоборот.

LumixТут ещё ограничитель сверху до кучи
Код: sql
1.
2.
3.
select min(t1.id) nextId 
    from tbl a join tbl b on a.id = b.id - 1
    where a.id > 463504 and a.id < 999999 and b.id is null


Если есть свободные значения, но все они меньше 463504, приключится облом... таблицу надо завернуть в кольцо. Тогда если есть хотя бы одно незанятое значение - оно будет найдено.
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39060923
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaЕсли есть свободные значения, но все они меньше 463504, приключится облом...
Lumixа каким запросом узнать первое несуществующее число больше 463504?Всё ч0тко по заданию. Если формулировка задания чего-то не учитывает - все претензии к ТСу :)
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39060932
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix,
а какой физический смысл получения РАНДОМНОГО уникального числа в диапазоне?
Т.е. каково дальнейшее применение?
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061022
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinovфизический смысл

Что означает термин физический смысл ?

Я от tanglir до сих пор не получил ответа что значат его термины "настоящий" рандом и пседорандом , а тут вы ещё какой-то физический смысл...

развели тут зоопарк терминов )

Alex_UstinovТ.е. каково дальнейшее применение?

Вместо того, чтобы создать новую запись с последовательным номером, мы создаем новую запись с этим рандомным номером.
Что-ж не понятного-то?

Ну например, если бы у нас таблице был бы автоинкемент, начинающийся от 100000 и было бы уж 500 животных, то если мы создавали обычным бы макром, то 501 животное получило бы номер 100501, а в нашем случае номер будет какой-нибудь типа 430564 или 676133, а животных все равно 501.

Есть же разница: либо у вас в клетке живет 5 попугаев 100354, 100355, 100356, 100357, 100403
или у вас в клетке живет 5 попугаев 156105, 679313, 456321, 546689, 901636.

Вот.
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061070
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix,

вы ответьте без эмоций, пожалуйста.
авторНу например, если бы у нас таблице был бы автоинкемент, начинающийся от 100000 и было бы уж 500 животных, то если мы создавали обычным бы макром, то 501 животное получило бы номер 100501, а в нашем случае номер будет какой-нибудь типа 430564 или 676133, а животных все равно 501.

Есть же разница: либо у вас в клетке живет 5 попугаев 100354, 100355, 100356, 100357, 100403
или у вас в клетке живет 5 попугаев 156105, 679313, 456321, 546689, 901636.
Для меня нет разницы и для базы данных нет разницы кто у вас живет в клетке - попугай 100505 или 676133 и они от этого не подохнут )
Зачем именно РАНДОМНЫЕ "бирки"? обзовем их так (это точно не id в понятии СУБД)
Дальше для чего эта рандомность?
Если это просто так - так и скажите, "Это просто так"
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061088
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixЯ от tanglir до сих пор не получил ответа что значат его термины "настоящий" рандом и пседорандом Это потому что я нестрого эти термины использовал - вообще-то даже то, что я называл настоящим рандомом по сути псевдорандом :)
"Настоящий" - это когда невозможно выявить закономерности в случайных данных, даже если эти закономерности НСД имеются в нашем ГСЧ. Насколько я знаю, большая часть ГСЧ в писюковых ЯП - это по сути псевдорандом. Сид у них ещё может быть по-настоящему случайным, а вот дальнейшая последовательность строго определена сидом. Хотя "на глаз" она вроде как случайна.
А "псевдо" - это когда метод генерации СЧ настолько хреновый, что эти закономерности видно, как говорится, невооружённым глазом.
Вот сравните ваш вариант (генерим разные СЧ пока не найдём незанятое) и предложенный вариант (берём наименьший из тех незанятых, что больше одного сгенерённого СЧ).
Допустим, заполнили мы половину имеющегося диапазона тем и другим методом, ну и что исходный ГСЧ - хороший, "настоящий". Так в первом случае распределение будет такое же, как у исходного ГСЧ - более-менее равномерное. А вот во втором случае у вас будет много непрерывных последовательностей, много дырок между ними и немножко отдельно стоящих чисел. То есть распределение будет не сказать чтобы такое уж случайное.
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061093
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_UstinovЗачем именно РАНДОМНЫЕ "бирки"?

Потому что когда бирки слишком похожие, то очень часто сотрудники зоопарка путают особей между собой, особенно там, где плохая освещенность и размеры особей небольшие, а сами особи на внешний вид хрен отличишь между собой. Например, те же зеленые попугайчики отличаются тремя перышками и, конечно, вечером, уставшая баба Нюра в очках -3 может легко перепутать 100503 и 100505, даже если она очень ответственная женщина.

Перепутать 654321 и 467963 гораздо сложнее.
Мозгу физически труднее спутать эти два числа даже не читая их по отдельным цифрам.

Alex_Ustinov(это точно не id в понятии СУБД)

ой, а это где это вы это такое понятие СУБД встетили??
по мне так очень даже себе id...
просто видимо вы за всю жизнь привыкли, что айдишники всегда последовательные вот и не мыслите себе иную природу айдишников...
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061102
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirLumixЯ от tanglir до сих пор не получил ответа что значат его термины "настоящий" рандом и пседорандом Это потому что я нестрого эти термины использовал - вообще-то даже то, что я называл настоящим рандомом по сути псевдорандом :)
"Настоящий" - это когда невозможно выявить закономерности в случайных данных, даже если эти закономерности НСД имеются в нашем ГСЧ. Насколько я знаю, большая часть ГСЧ в писюковых ЯП - это по сути псевдорандом. Сид у них ещё может быть по-настоящему случайным, а вот дальнейшая последовательность строго определена сидом. Хотя "на глаз" она вроде как случайна.
А "псевдо" - это когда метод генерации СЧ настолько хреновый, что эти закономерности видно, как говорится, невооружённым глазом.
Вот сравните ваш вариант (генерим разные СЧ пока не найдём незанятое) и предложенный вариант (берём наименьший из тех незанятых, что больше одного сгенерённого СЧ).
Допустим, заполнили мы половину имеющегося диапазона тем и другим методом, ну и что исходный ГСЧ - хороший, "настоящий". Так в первом случае распределение будет такое же, как у исходного ГСЧ - более-менее равномерное. А вот во втором случае у вас будет много непрерывных последовательностей, много дырок между ними и немножко отдельно стоящих чисел. То есть распределение будет не сказать чтобы такое уж случайное.

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

Код: sql
1.
select id from t order by rand() limit 250



невооруженным взглядом можно заметить закономерность...
либо вы Линус Торвальдс с лурки )
либо мои аналитические способности находятся на уровне хоббита с Флореса...
потому что для меня эти данные являются достаточно рандомными...
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061103
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixкогда бирки слишком похожиеЕсли визуальная схожесть в текстовом написании - это реальная причина, то такие вещи делаются другими способами.
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061114
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix,

я же просил без эмоций )
вы почитайте свой первоначальный вопрос.
Это id - в вашем контексте:
Код: sql
1.
create table t (id int not null auto_random_value(100000, 999999), primary key (id));


primary key (id) - это не поле для хранения "бирок"
когда вы это поймете - вопросов и к вам и ваших будет меньше.
а в моей жизни "id" вообще неприменимо, primary key (id) - Понятие СУБД
насчет "визульного" разброса можно было сразу озвучить
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061116
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixAlex_UstinovЗачем именно РАНДОМНЫЕ "бирки"?

Потому что когда бирки слишком похожие, то очень часто сотрудники зоопарка путают особей между собой, особенно там, где плохая освещенность и размеры особей небольшие, а сами особи на внешний вид хрен отличишь между собой. Например, те же зеленые попугайчики отличаются тремя перышками и, конечно, вечером, уставшая баба Нюра в очках -3 может легко перепутать 100503 и 100505, даже если она очень ответственная женщина.

Перепутать 654321 и 467963 гораздо сложнее.
Мозгу физически труднее спутать эти два числа даже не читая их по отдельным цифрам.

Alex_Ustinov(это точно не id в понятии СУБД)

ой, а это где это вы это такое понятие СУБД встетили??
по мне так очень даже себе id...
просто видимо вы за всю жизнь привыкли, что айдишники всегда последовательные вот и не мыслите себе иную природу айдишников...

ты не понимаешь.
нельзя вкладывать в идентификатор (первичный ключ) никакой смысл кроме идентификации строки. иначе будут проблемы. проблемы, которые ты сам себе навяжешь таким способом.

если тебе нужна какие то предметно-ориентированные бирки, делай их не первичным ключем, а просто полями.
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061129
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftLumixкогда бирки слишком похожиеЕсли визуальная схожесть в текстовом написании - это реальная причина, то такие вещи делаются другими способами.

К сожалению, не делаются, потому что всем на это похер.
Отношения у них в коллективе таким образом устроены, что проще наказать бабу Нюру, если что...
У них все так устроено, что главное - не сделать лучше, а главное, чтобы было на кого стрелки перевести...

То есть выражаясь в ваших терминах эта проблема не является официально признанной проблемой.

Введение подобных разбросанных номерков - это "бесплатный" и неофициальный бонус от разрабов, чтобы сделать жизнь простых тёть Нюр проще, и при этом не вводить дополнительное поле "Бирка", а замаскировать его под "официально обязательный" идентификатор животного.
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061145
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinovprimary key (id) - это не поле для хранения "бирок"

А вы докажите.

Мне почему-то кажется, что вы заколебетесь доказывать этот тезис.

Alex_Ustinovкогда вы это поймете - вопросов и к вам и ваших будет меньше.

А что вы мне конкретно предлагаете сделать?
Сесть в позу лотоса и медитировать до полного просветления?

Я принципиально считаю, но номера бирок могут быть примарным ключом и никакого "криминала" я в этом не вижу вообще ни разу.

Alex_Ustinovа в моей жизни "id" вообще неприменимо, primary key (id) - Понятие СУБД

Мне кажется, что не понятие субд, а просто ригидность вашего мышления.
Вы за десятилетия привыкли вот и думаете, что вариативности в этом вопросе быть не может...

Alex_Ustinovнасчет "визульного" разброса можно было сразу озвучить

Ага, щас.. ))))
я же знаю как тут на форуме все устроено...
закидали бы меня какашками с самого начала...

а так, я прикольный инструмент узнал про селф-джои на идентификатор с инкрементом

я считаю то, что предложил tanglir - это реально прикольный причендал, который может работать на ЛЮБОЙ диапазон айдишников не только на 900 тыс., но его можно использовать и на несколько миллиардов айдишников не создавая при этом таблицы на несколько миллиардов заранее
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061148
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixmiksoftпропущено...
Если визуальная схожесть в текстовом написании - это реальная причина, то такие вещи делаются другими способами.

К сожалению, не делаются, потому что всем на это похер.
Отношения у них в коллективе таким образом устроены, что проще наказать бабу Нюру, если что...
У них все так устроено, что главное - не сделать лучше, а главное, чтобы было на кого стрелки перевести...

То есть выражаясь в ваших терминах эта проблема не является официально признанной проблемой.

Введение подобных разбросанных номерков - это "бесплатный" и неофициальный бонус от разрабов, чтобы сделать жизнь простых тёть Нюр проще, и при этом не вводить дополнительное поле "Бирка", а замаскировать его под "официально обязательный" идентификатор животного.Ну вот, опять я не до конца изложил свою мысль. Я имел в виду, что даже в рамках технических методов можно бороться с ошибками операторов более эффективно, чем рандомом. Можно же осознанно генерить номера так, чтобы они гарантированно различались как минимум в двух-трех разрядах. Более того, при достаточном запасе избыточности и не слишком высоком уровне ошибок можно даже автоматически корректировать пользовательский ввод, а не только проверять корректность.
Ссылка на тему - http://dic.academic.ru/dic.nsf/ruwiki/973464
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061157
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix,

упростите лексику...
поле бирка должно быть уникальным, а не примари
это ригидность вашего мышления к сожалению
при более полном изложении вопроса вам наоборот помогут быстрее, чем как вы думаете кака... и прочее
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061178
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixПерепутать 654321 и 467963 гораздо сложнее.
Мозгу физически труднее спутать эти два числа даже не читая их по отдельным цифрам.
Тогда лучше сделай GUID. Их не то что спутать - даже осознать без сравнения с бумажкой малореально. А заодно отпадут проблемы с длиной - все гуиды одинаковой длины,- и дубляжем - уж больно тех гуидов дофига.
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061180
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixлибо мои аналитические способности находятся на уровне хоббита с Флореса...угу :)
На примере тех же попугайчиков: вот вам привезли их 10 штук.
Старым способом (честная генерация СЧ в цикле пока не получим незанятый номер) они с довольно высокой вероятностью получат разные номера (скорее всего).
Новым способом - а тут вероятность того, что они получат последовательные номера, повыше. Причём чем больше номеров уже использовано, тем это вероятнее.
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061190
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirНовым способом - а тут вероятность того, что они получат последовательные номера, повыше. Причём чем больше номеров уже использовано, тем это вероятнее.

Повыше ) ну и слово...

Чисто из спортивного интереса, вопрос для тех, кто силен в теории вероятностей:

какова вероятность для нового попугайчика получить рядом стоящий номер с другим попугайчиком, если в таблице уже 8765 животных, а всего животных может быть только 899 999 (то есть 900 тыс. - 1)

я просто в теории вероятностей "школьник" и мне почему-то кажется, что вероятность будет

1 / (899999 - 8765) = 0,0001%

то есть как бы с этим можно "идти в бой"
хотя может я что-то в математике этой ситуации не так понимаю...
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061198
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinovполе бирка должно быть уникальным, а не примари


я не совсем догоняю что означает эта фраза...
если честно, то я не совсем даже понимаю, что такое primary key
то есть я не понимаю откуда он исторически появился...

короче, для меня примари это всегда было просто поле, которое позволяет уникально идентифицировать запись
а в данном случае бирка - это и есть этот самый уникальный идентификатор животного
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061200
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот, смотрите сами, что на миллионе записей при половинном заполнении выходит:
мин-макс длина цепочкиколичество в вар. 1количество в вар.22-5117285864296-1075381495311-15234272816-20462621-30021631-1000000015Цифры каждый раз, ясное дело, немного другие, но их соотношение сильно не меняется.
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061204
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixкакова вероятность для нового попугайчика получить рядом стоящий номер с другим попугайчиком, если в таблице уже 8765 животных, а всего животных может быть только 899 999 (то есть 900 тыс. - 1)Ну пока таблица малозаполнена, то вероятность мала в обоих вариантах. Я говорю о том, что чем больше номеров будет занято, тем выше шанс получить соседний по второму варианту. А по первому шанс остаётся неизменным.
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061206
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirВот, смотрите сами, что на миллионе записей при половинном заполнении выходит:
мин-макс длина цепочкиколичество в вар. 1количество в вар.22-5117285864296-1075381495311-15234272816-20462621-30021631-1000000015Цифры каждый раз, ясное дело, немного другие, но их соотношение сильно не меняется.

не хватает силы мозга распарсить сие творениче
что есть длина цепочки?
что есть вариант 1 и 2
что означает кол-во в каждом из вариантов?
можете ли вы как обычно делают в науке после таблицы сделать свой вывод?
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061207
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirА по первому шанс остаётся неизменным.

Я слегка запутался какой из вариантов первый, а какой второй.
Ваш на джоине с инкрементом - это первый, а миксофтовский на предвычисленных значениях второй.
Такая нумерация вариантов?
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061209
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создаются 2 массива длиной 1М. Далее каждый массив заполняется по своему варианту. Ну тут я уже не буду повторяться. Потом ищутся все последовательности("цепочки") выданных номеров, определяются их длины ну и всё это разбивается по категориям (короткие цепочки, подлинней и т.д.). Как видно, второй вариант даёт гораздо больше длинных последовательностей.
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061211
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, первый - это ваш. Честный рандом. Ну и миксофтовская его модификация. Суть у них одна в общем-то.
А второй вариант - это "поиск первого незанятого".
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061214
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix,

циферки есть циферки, если уж беспокоиться о "бабе Нюре", то можно продумать какие то словестные комбинации для рандомной "бирки"
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061217
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirНет, первый - это ваш. Честный рандом. Ну и миксофтовская его модификация. Суть у них одна в общем-то.
А второй вариант - это "поиск первого незанятого".

ок, понятно

а можно как-то без ущерба для здоровья оптимизировать ваш вариант каким-нибудь order by random() чтобы приблизить эффективность к предвычисленным таблицам или к обычной проверке свободной ячейке в цикле? Потому что ваш вариант дюже приятен для очень больших номеров (миллиардников)
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061219
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_UstinovLumix,

циферки есть циферки, если уж беспокоиться о "бабе Нюре", то можно продумать какие то словестные комбинации для рандомной "бирки"

Ваша идея понятно.
Давайте её попробуем.
Предложите какой-нибудь вариант.
И сравним его по эффективности с нашим вариантом, где бирки идут в разброс.
Итак, в потенциале у нас 899999 бирок для животных (столько конечно не будет никогда, но в потенциале они есть).
Итак, какие именно словесные комбинации вы предлагаете.
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061221
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixбез ущерба для здоровьяЕсли у вас заполнение процентов на 10, то беспокоиться не о чем - шанс на несколько последовательных номеров подряд всё равно ничтожен.
ЗЫ. А что не так с таблицей предвычисленных номеров? Имхо самое железобетонное решение.
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061232
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix,

вариантов как и часто используемых наборов перемноженных между собой очень много
абревиатуры стран
штаты США
города России
... и т.д.
Баба Нюра будет удивлена зайдя в клетку к слону ДжонRUS755Владивосток
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061289
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirЕсли у вас заполнение процентов на 10, то беспокоиться не о чем - шанс на несколько последовательных номеров подряд всё равно ничтожен.Я бы сказал, что ничтожно отличается от единицы :)
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061301
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и вся суть вопроса сводится к следующим действиям
вставляете записи как обычно (оставим id автоинкремент примарикей не вдаваясь в историю)
в уже существующей записи генерите "бирку" какую вам или бабе Нюре удобно
так это логичнее
да, конечно, для этого необходимы дополнительные тех.таблицы (2 или 3 или 4 или 5 в зависимости от наборов, а для базы это сущий пустяк), но использовав достаточно наполненные в бирке первый и последний набор символов (что обычно бросается в глаза), будет отличное визуальное отличие
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061437
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поехал на обед, сел за руль и вспомнил об автомобильных номерах.
Поштудируйте как они формируются. Для одного региона комбинаций около 1млн. (вроде бы)
Создавались новые автономера тоже для "удобочитаемости"
Похожий подход применим к вашей задаче.
...
Рейтинг: 0 / 0
Рандомный автоиндекс
    #39061492
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_UstinovДля одного региона комбинаций около 1млн. (вроде бы)
12*12*12*999=1726272
...
Рейтинг: 0 / 0
49 сообщений из 49, показаны все 2 страниц
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Рандомный автоиндекс
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]