Случайно 3-цифрено число (при запис в БД?)

sizif

Registered
Здравейте!

Нуждая се от функция, която да генерира случайно трицифрено число, което обаче да не се повтаря, т.е. да взема предвид вече наличните резултати (съхранени в БД).

Имам някакви идеи, как да го направя, но обикновено се оказва, че има по-лесни начини... :)

Моля, помогнете!

ПП: Не обяснявам точно... :(

Към числото ще има и две букви, които ще добавям по друг начин. Идеята е да се получават уникални комбинации от двете букви (подбрани от друг скрипт) и случайното число, така че за тези букви числото да не се повтаря...
Има ли някакво значение (улеснение), че записът ще се прави в БД...

Благодаря предварително!
 
Няма начин да не се повтаря
в този случей има само 900 възможности което е направо невъзможно да не се повтаря
според мен има 2 варианта
избираш едно трицифрено число и да проверяваш дали се повтаря ако се повтаря избираш наново а ако не се повтаря продължаваш нататък
а другия вариант е да работиш с по големи числа
напримерно с такиви
Код:
<?php
$rand1      = rand(100, 999);
$rand2      = rand(100, 999);
$po         = $rand1*$rand2;
$po2        = $po*$po;
echo "$po2";
?>
 
първо правиш фумкцията за рандума на числата, след това една заявка към базата която вика резултатите и проверяваш дали няма вече такова записано, ако има записано се рефрешва и така докато стигне до липсващо с което продължаваш нататък.

П.П. а ако може и повече от 3 числа, може да ползваш time() .
пример: 1171038892

и така всяко число ще е уникално.
 
Здравейте!

Благодаря ви за отговорите!

За съжаление не мога да избирам, колко цифрено да бъде числото - става дума за 5-знаков реф-номер: буквите са от вътрешна кодировка според града и региона, а 3-те цифри трябва да го завършат, правейки го уникално за съответното буквено съчетание...
Не знам откъде на възложителя му хрумна тази идея, но ми бърка в здравето, а не е шега: ами когато в БД редовете станат 1000 и повече? За да докарам уникален номер ще въртя цикъла стотици пъти :(

Питах се дали няма някаква функция, с която БД сама да извършва това, напр тип на полето, който да генерира случайна номерация извън наличните... А как пък щях да добавям буквите?! :(

Ще го мисля... поне до понеделник...

Още веднъж: благодаря, че се включихте с мнения!
 
sizif каза:
Здравейте!

Благодаря ви за отговорите!

За съжаление не мога да избирам, колко цифрено да бъде числото - става дума за 5-знаков реф-номер: буквите са от вътрешна кодировка според града и региона, а 3-те цифри трябва да го завършат, правейки го уникално за съответното буквено съчетание...
Не знам откъде на възложителя му хрумна тази идея, но ми бърка в здравето, а не е шега: ами когато в БД редовете станат 1000 и повече? За да докарам уникален номер ще въртя цикъла стотици пъти :(

Питах се дали няма някаква функция, с която БД сама да извършва това, напр тип на полето, който да генерира случайна номерация извън наличните... А как пък щях да добавям буквите?! :(

Ще го мисля... поне до понеделник...

Още веднъж: благодаря, че се включихте с мнения!

о, ама така кажи :)
ама наистина, трябва да седнеш да почетеш за ДБ
Хубаво е всяка таблица да и слагаш една колонка (прието е първата за удобство), която за type и зааваш INT, extra избираш auto_increment и кликаш на ключето дето като задържиш мишката пише primary.
тази колонка ще започне от 1 и всеки нов ред ще бъде с 1 по голям.
демек почва да номерира редовете. Те няма да се повтарят дори и ако изтриеш ред. Тогава номера ще се прескочи.
Вече към този номер може да си добавяш разни бъкви, които ще съхраняваш в друга колонка...
След това вече ще ти е и много лесно да се обръщаш към базата когато те интересува конкретна обява.
 
Slavei,

благодаря, но знам за това, даже ако помниш преди време не се справях с подреденото листване на редовете в таблицата и питах как да става по уникалния номер...

Проблемът е, че числото не трябва да е поредно, защото ми искат случайно число.
Административният номер на обявата е ключа към реда в таблицата таблицата - там проблем няма, то е число - Инт и се попълва auto_increment, но сега изскочи този втори реф, който ще виждат потребителите. Този реф трябва да е съчетанието от буквите (известни) и случайно, неповтарящо се число за тази буквена комбинация :(
Предполагам идеята е да не се знае колко точно са имотите поне в началото, когато ще са малко, но когато таблицата набъбне, с тази игра на криеница (проверка до безкрай), не ми се мисли...

Някаква възможност БД да генерира такова непоредно, уникално число?
 
sizif каза:
Slavei,

благодаря, но знам за това, даже ако помниш преди време не се справях с подреденото листване на редовете в таблицата и питах как да става по уникалния номер...

Проблемът е, че числото не трябва да е поредно, защото ми искат случайно число.
Административният номер на обявата е ключа към реда в таблицата таблицата - там проблем няма, то е число - Инт и се попълва auto_increment, но сега изскочи този втори реф, който ще виждат потребителите. Този реф трябва да е съчетанието от буквите (известни) и случайно, неповтарящо се число за тази буквена комбинация :(
Предполагам идеята е да не се знае колко точно са имотите поне в началото, когато ще са малко, но когато таблицата набъбне, с тази игра на криеница (проверка до безкрай), не ми се мисли...

Някаква възможност БД да генерира такова непоредно, уникално число?

ами тогава, взимаш ид-то на обявата, добавяш някакво случайно число към ид-то и ето ти едно случайно число, което ще бъде уникално ;)
 
Би могло да стане, но цифрите ще станат повече, а на мен ми трябват точно 3... :(

М/у другото, има ли формат за поле в БД, при което задавам точен брой символи (в моя случай 5) и ако символите са по-малко, автоматично да се добавят нули отпред.

Пример:
12 да стане след записа: 00012?

В момента броя знаците и въртя през цикъл за да добавям нулите преди записа (типа на полето е варчар), но ако има вградена опция за БД, би била улеснение...

Така и така разбутах БД, поне да оптимизирам кода... :)
 
sizif каза:
Би могло да стане, но цифрите ще станат повече, а на мен ми трябват точно 3... :(

М/у другото, има ли формат за поле в БД, при което задавам точен брой символи (в моя случай 5) и ако символите са по-малко, автоматично да се добавят нули отпред.

Пример:
12 да стане след записа: 00012?

В момента броя знаците и въртя през цикъл за да добавям нулите преди записа (типа на полето е варчар), но ако има вградена опция за БД, би била улеснение...

Така и така разбутах БД, поне да оптимизирам кода... :)

сега пък три цифри... не ми се мисли.... отрежи ги от някъде ;)

Пример:
12 да стане след записа: 00012?
опитай така:
$j = 00012;
$j = sprintf("%05d", $j);
 

Back
Горе