powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Получить случайную строку из выборки
85 сообщений из 85, показаны все 4 страниц
Получить случайную строку из выборки
    #39852258
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица с номерами NUMBERS(num,status), в которой содержится 10к записей.
Мне нужно получить из нее один случайный свободный (status=0) номер и закрепить его (status=1) после использования.
Не посоветуете, как лучше всего получить одну случайную запись из выборки?

Решение "в лоб":
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select *
from (
select *
from numbers
where status=0
order by dbms_random.value
)
and rownum=1



Но намного больше мне нравится такой способ:
Код: plsql
1.
2.
3.
4.
select *
from numbers sample(1)
where status=0
and rownum=1


Вот только из документации не могу найти информацию, где определяется, какие записи попадут в sample, и попадут ли они туда до where или после.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852267
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.получить из нее один случайный свободный (status=0) номер и закрепить его (status=1) после использования.
Не туда копаете изначально.
Получить И ЗАКРЕПИТЬ одну запись - курсор select for update skip locked, из которого фетчим одну строку с последующим update where current of.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852268
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

sample_percent
For sample_percent, specify the percentage of the total row or block count to be included in the sample.

.....
stax
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852269
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousAlibek B.получить из нее один случайный свободный (status=0) номер и закрепить его (status=1) после использования.
Не туда копаете изначально.
Получить И ЗАКРЕПИТЬ одну запись - курсор select for update skip locked, из которого фетчим одну строку с последующим update where current of.
Ах да, случайную... Ну отсортируйте табличку посредством insert into ... select from ...order by dbms_random.value, 10к строк - мелочь.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852271
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

он хочет чтоб селект вернул одну "очень" случайную запись

.....
stax
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852272
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.попадут ли они туда до where или после.
До. sample - не фильтр, это часть query_table_expression
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852274
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxон хочет чтоб селект вернул одну "очень" случайную запись
ну дык ить и будет "случайная", ежели записи хранятся в хаотичном порядке.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852279
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousStaxон хочет чтоб селект вернул одну "очень" случайную запись
ну дык ить и будет "случайная", ежели записи хранятся в хаотичном порядке.
оно как-бы теоретически без ордер бай и так случайно выбирает, но на практике в более менее постоянном порядке

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

.....
stax
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852280
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Вот только из документации не могу найти информацию, где определяется, какие записи попадут в sample, и попадут ли они туда до where или после.
из доки

https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_10002.htm#SQLRF01702

sample_clause

The sample_clause lets you instruct the database to select from a random sample of data from the table, rather than from the entire table.

....
stax
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852293
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
create table dropme_t as select rownum num, 0 status from dual connect by level <= 10e3 order by dbms_random.value;
Table created

declare cursor c is select * from dropme_t where status = 0 for update skip locked;
begin 
  for i in c loop dbms_output.put_line('Закреплено: '|| i.num); 
                      update dropme_t set status =1 where current of c; 
                      exit; 
  end loop; 
commit; 
end;
/
Закреплено: 4790
PL/SQL procedure successfully completed

SQL> /
Закреплено: 3112
PL/SQL procedure successfully completed

SQL> /
Закреплено: 2139
PL/SQL procedure successfully completed

SQL> /
Закреплено: 5916
PL/SQL procedure successfully completed

SQL> /
Закреплено: 7492
PL/SQL procedure successfully completed

SQL> 


Staxнапр надо разыграть приз (случайному клиенту)
В этом случае
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
declare l_num number; try integer := 0;
  try_limit constant integer := 100e3;
begin
  loop
    try := try + 1;
    update dropme_t set status = 1 where status = 0 and num = round(dbms_random.value(1,10e3))
    returning num into l_num;
  exit when sql%rowcount = 1;
  exit when try >= try_limit;
  end loop;
  if try < try_limit then
    dbms_output.put_line('Закреплено: '|| l_num);
  else
    dbms_output.put_line('Нишмогла я...');
  end if;
end;
/
Закреплено: 4457
PL/SQL procedure successfully completed

SQL> /
Закреплено: 3832
PL/SQL procedure successfully completed

SQL> /
Закреплено: 5977
PL/SQL procedure successfully completed

SQL> /
Закреплено: 6133
PL/SQL procedure successfully completed

SQL> 
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852304
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousВ этом случае

нету в табличке сквозного num

.....
stax
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852306
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxandrey_anonymousВ этом случае

нету в табличке сквозного num
Что это меняет?
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852307
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно, еще раз, для полноты изложения:
- если несколько параллельных процессов должны обрабатывать набор данных, отбирая по одной записи - см. метод с for update skip locled
- если надо всего лишь выбрать пару-тройку "призеров" - то проще всего генерировать случайный ключ и делать probe.
Генерацию ключа можно заменить генерацией случайного rowid, если чуть напрячься и построить карту экстентов таблицы.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852310
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousЧто это меняет?
что кодировать взамест and num = round(dbms_random.value(1,10e3))?

....
stax
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852315
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxandrey_anonymousЧто это меняет?
что кодировать взамест and num = round(dbms_random.value(1,10e3))?
Верхнюю и нижнюю границу num.
Для сильно разреженных данных можно либо пронумеровать строки, либо генерировать rowid.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852319
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousВерхнюю и нижнюю границу num.
Для сильно разреженных данных можно либо пронумеровать строки, либо генерировать rowid.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
SQL> update dropme_t set num = num*1000;
10000 rows updated

SQL> create index dropme_t$num on dropme_t(num);
Index created

SQL> 
declare l_num number; try integer := 0;
  try_limit constant integer := 100e5;
begin
  loop
    try := try + 1;
    update dropme_t set status = 1 where status = 0 and num = round(dbms_random.value(1,10e6))
    returning num into l_num;
  exit when sql%rowcount = 1;
  exit when try >= try_limit;
  end loop;
  if try < try_limit then
    dbms_output.put_line('Закреплено: '|| l_num);
  else
    dbms_output.put_line('Нишмогла я...');
  end if;
end;
/
Закреплено: 2803000
PL/SQL procedure successfully completed

SQL> /
Закреплено: 9299000
PL/SQL procedure successfully completed

SQL> /
Закреплено: 6073000
PL/SQL procedure successfully completed
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852346
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

update numbers set status=1 where status=0 and rownum=1
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852347
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-update numbers set status=1 where status=0 and rownum=1
Само собой, только добавить returning into.
Ну тут нет случайности.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852348
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

добавте в вывод колличество спроб

я не спорю и ничего не доказываю

но имхо order by dbms_random.value самый лучий вариант

....
stax
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852351
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сортировать 10к строк, чтобы получить из них одну случайную?
Как-то это выглядит не очень.
Тогда уж лучше вообще не сортировать, а вместо rownum=1 написать rownum=(select count from numbers where status=1)
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852362
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Ну тут нет случайности.В оракле нет штатных средств получения случайности.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852369
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сортировать 10к коротких строк - мелочь, вообще говоря, если не сто-двести-тысячу раз в секунду.
Но Вы так и не озвучили задачу, для решения которой захотелось странного.

Alibek B.вместо rownum=1 написать rownum=(select count from numbers where status=1)
И что будет?
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852405
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Регистрируются клиенты, получают уникальный номер и затем используют этот номер в разных местах.
Если эти номера будут не случайными, а последовательными, то это будет нежелательным. Планируются сценарии типа "подарок каждому сотому клиенту" и последовательная нумерация будет приводить к попыткам манипулирования.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852406
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousИ что будет?
По идее - я выберу не первую строку перемешанной выборки, а случайную строку не перемешанной выборки.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852407
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousСортировать 10к коротких строк - мелочь
Не только сортировать - вначале сгенерировать 10к случайных значений, а затем их сортировать.
Сгенерировать одно случайное значение и отфильтровать по нему кажется более оптимальным.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852412
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.написать rownum=(select count from numbers where status=1)
Очепятка, я имел ввиду примерно такое:
Код: plsql
1.
2.
3.
4.
select *
from numbers
where state=1
and rownum = (select trunc(dbms_random.value*count(*)) from numbers where state=1)


Но в таком виде запрос возвращает пустой результат.
Даже с rownum=2 возвращает пустой результат.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852416
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.последовательная нумерация будет приводить к попыткам манипулирования.Что меняет непоследовательность?
where rownum=1 достаточно.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852425
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Человек отправляет заявку, получает номер 290 - и отправляет ещё десяток заявок, чтобы получить номер 300.
Если номер будет рандомный, то мотивов так делать у него не будет.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852433
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Alibek B.,

Sys_guid используйте вместо сиквенсов и все проблемы исчезнут
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852458
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Человек отправляет заявку, получает номер 290 - и отправляет ещё десяток заявок, чтобы получить номер 300.
Если номер будет рандомный, то мотивов так делать у него не будет.Во-первых, апдейт "первой" строки не обязан возвращать последовательные числа. Во-вторых. Стоит ли переживать из-за различий между C2035B и C204 среди десятка пользователей по недоразумению прошедших твою "регистрацию"?
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852469
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Человек отправляет заявку, получает номер 290 - и отправляет ещё десяток заявок, чтобы получить номер 300.
Если номер будет рандомный, то мотивов так делать у него не будет.Высосанная из пальца проблема - измышлизмЪ.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852482
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Человек отправляет заявку, получает номер 290 - и отправляет ещё десяток заявок, чтобы получить номер 300.
Если номер будет рандомный, то мотивов так делать у него не будет.

использовать dbms_random

1) выдавать последовательно случайные номера из "дипозитария" (table dropme_t)
2) генерить номер налету (если дубль - повторить, імхо гемороя больше)

.....
stax
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852503
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicВысосанная из пальца проблема - измышлизмЪ.
На обработку заявок тратится время и организационные ресурсы, пусть и немного.
Лучше изначально исключить такие траты.

Staxгенерить номер налету (если дубль - повторить
Это не подойдет.
Допустим из 10к строк использовано 9990. Сколько будет повторений, чтобы получить оставшиеся 10?
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852520
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Это не подойдет.
Допустим из 10к строк использовано 9990. Сколько будет повторений, чтобы получить оставшиеся 10?

авторімхо гемороя больше

.....
stax
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852568
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderAlibek B.,
Sys_guid используйте вместо сиквенсов и все проблемы исчезнут
В означенной постановке (регистрируются клиенты) поддерживаю полностью.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852626
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если речь идет о регистрации (каждый сотый получает приз)
я б генерил случайное число от 0 до 100
и если оно равно 7, то получи приз

....
stax
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852641
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

Если ты генеришь каждый раз случайное число, то сомневаюсь, что каждый сотый получит приз.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852642
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxесли речь идет о регистрации (каждый сотый получает приз)
я б генерил случайное число от 0 до 100
и если оно равно 7, то получи приз
Это ни коим образом не избавляет от заявленного ТС метода "охоты за призом" посредством многократной регистрации.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852648
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxя б генерил случайное число от 0 до 100
и если оно равно 7, то получи призНет, 42 лучше.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852652
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousЭто ни коим образом не избавляет от заявленного ТС метода "охоты за призом" посредством многократной регистрации.
я понял проблему многократной регистрации чуть по другому

колиент догадался о системе определения выиграша (ид кратно 100), и если у него 297 то достаточно еще трех раз

если генерить, то приз может выпасть и напр два раза подряд, а может и за 100 не повезет

.....
stax
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852654
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
123ййStax,

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

не сотый, а примерно сотый, если равноменое распределение от 0 до 100

....
stax
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852656
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
123ййЕсли ты генеришь каждый раз случайное число, то сомневаюсь, что каждый сотый получит приз.
"Каждый сотый по порядку" - это не случайное число.
а вот "Один из ста" - вполне себе.
И в этом случае все зависит от качества ГСЧ.
В случае dbms_random все не так уж и плохо:
Код: plsql
1.
2.
3.
4.
5.
select v, count(*)
     , stdDev(count(*)) over() 
     , median(count(*)) over() 
     , avg(count(*)) over() 
  from t group by v
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852658
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicStaxя б генерил случайное число от 0 до 100
и если оно равно 7, то получи призНет, 42 лучше.

согласен 42 лучше
чем луче? чем 7

....
stax
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852662
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StaxElic42 лучше.
чем луче? чем 7

Вопрос филисофский.
42 - уже ставший классическим ответ на «Главный вопрос жизни, вселенной и всего такого» (англ. The Ultimate Question of Life, the Universe, and Everything)
7 - число простое, но тоже нетривиальное: семь чудес света, 7 дней (неделя) на сотворение мира, семь цветов радуги и много еще чего 7... в общем, "удачное" такое число.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852669
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous"Каждый сотый по порядку" - это не случайное число.
а вот "Один из ста" - вполне себе.
а зачем нужно случайное число ?
Alibek B.Регистрируются клиенты, получают уникальный номер и затем используют этот номер в разных местах.
Если эти номера будут не случайными, а последовательными, то это будет нежелательным. Планируются сценарии типа "подарок каждому сотому клиенту" и последовательная нумерация будет приводить к попыткам манипулирования.
вполне достаточно mod
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852673
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
123ййвполне достаточно mod
мод от чего?
....
stax
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852676
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для проверок типа "каждый сотый" разумеется будут использоваться свои собственные счетчики (критерии), поэтому способ выделения номеров может быть любым, хоть последовательный, хоть рандомный.
Но если он будет последовательный, то пользователи будут думать, что призовым будет номер, оканчивающийся на два нуля, и будут пытаться его получить. Ну либо будут пытаться получить красивый номер из каких-то других соображений.
Чтобы таких мотивов у них не было, я хочу выдавать рандомные номера.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852679
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Чтобы таких мотивов у них не было, я хочу выдавать рандомные номера.
Выдавайте GUID.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852685
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это будет неудобно уже для пользователей.
Номер будет одновременно являться и лицевым счетом.
При пополнении лицевого счета не составит проблемы запомнить и ввести 4 или 5 цифр.
Но запомнить 32 шестнадцатеричных чисел сможет не всякий, и даже ввести их без ошибки получится не всегда.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852686
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Это будет неудобно уже для пользователей.
Выдавайте карточку или QR-код с GUID-ом.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852689
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Строго говоря, QR-код по ГОСТ Р 56042-2014 (ДШК для Сбербанка) и так имеется.
Но пользователи далеко не всегда носят с собой карточки или квитанции.
Им удобнее запомнить небольшое число.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852693
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

например от row_number() или count
а если "+- неважно" то можно добавить, например, поле id (генерация сиквенсом) и от него
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852700
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Им удобнее запомнить небольшое число.
Не надо говорить за всех.
Сегодняшний пользователь обычно таскается с мобильником, на котором склонен держать приложения, которые могут демонстрировать QR или общаться по NFC.

...в конце концов, используйте для идентификации email/телефон, это сейчас становится общепринятым подходом.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852701
feagor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alibek B.,

Какая-то очень странная и надуманная проблема, имхо.
Если можно до бескоечности заводить заявки, то заведя 95% от всех заявок - клиент получает 95% всех возможных призов
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852702
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Alibek B.,

Люди регулярно забывают 4х значный пин код и 3х значный cvc, зачем им вообще помнить6еще и ваши номера...
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852726
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Люди могут забывать что угодно, хоть годовщину свадьбы или сроки сдачи работы. Люди разные и всем не угодишь.
Но все же большинство людей успешно запоминают 4-значный PIN-код, 11-значный номер телефона, 5-значный номер лицевого счета коммунальных услуг.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852729
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже третья страница, а я так и не понял, чем не устраивает where rownum=1.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852732
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feagorЕсли можно до бескоечности заводить заявки, то заведя 95% от всех заявок - клиент получает 95% всех возможных призов
Формально да.
Но выполнение заявки занимает определенное время и если создать 10-20 заявок труда много не потребуют, то создание тысяч заявок потребует много времени и слишком хлопотно.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852736
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.большинство людей
Большинство людей успешно запоминают то, чем пользуются ежедневно.
Используемая раз в N месяцев цифирь к таковой информации не относится.
Потому еще раз:
- привяжитесь к email и/или номеру телефона
- сделайте мобильное приложение и/или карточку NFC/ карточку с QR
Не заставляйте людей запоминать нужную только вам цифирь.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852737
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.много времени и слишком хлопотно.
Мда... Коллега, расширяйте кругозор.
Инструментов по автоматическому заполнению форм существует в количестве.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852738
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Alibek B.Но все же большинство людей успешно запоминают 4-значный PIN-код, 11-значный номер телефона, 5-значный номер лицевого счета коммунальных услуг.ась? серьезно?
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852754
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousпривяжитесь к email и/или номеру телефона
Возможность использования номера телефона есть.
Но некоторая часть пользователей пользуются услугами в нескольких точках — у них на каждой точке свой лицевой счет, но одинаковый номер телефона. Для таких пользователей номер телефона использовать нельзя, он не является уникальным идентификатором.

xtenderсерьезно?
За пределами Москвы тоже есть жизнь.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852768
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.создать 10-20 заявок труда много не потребуют, то создание тысяч заявок потребует много времени и слишком хлопотно.Ну тогда, при обнаружении последовательной выдачи пациент станет докручивать до красивого номера, заранее зная, что осталось не более 20 заходов, иначе забьет. При "случайной" он будет пытаться "ну еще разок" в зависимости от азартности. 10к номерной базы вероятно предполагает менее 1к пациентов, что тоже ставит под сомнение необходимость изворачиваться с последовательными номерами.
Из ненависти к пациентам-переборщикам достаточно заранее зарезервировать красивые номера для своих.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852773
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Из ненависти к пациентам-переборщикам достаточно заранее зарезервировать красивые номера для своих.
:)
Достаточно потребовать подтвердить телефонный номер
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852774
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.он не является уникальным идентификатором
так сделайте уникальный для системы, а пользователям можете всем раздать "универсальный код" 1111 :)
автор у них на каждой точке свой лицевой счет, но одинаковый номер телефона
сделайте concat вот и уникальность появилась

я сомневаюсь, что вы будете верефицировать клиента по вашему коду
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852780
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.andrey_anonymousпривяжитесь к email и/или номеру телефона
Возможность использования номера телефона есть.
Но некоторая часть пользователей пользуются услугами в нескольких точках — у них на каждой точке свой лицевой счет, но одинаковый номер телефона. Для таких пользователей номер телефона использовать нельзя, он не является уникальным идентификатором.
Минуточку.
Никто не говорит "сделайте телефон номером ЛС", тем более что телефон можно и поменять - в этом смысле больше подходит СНИЛС.
Вам предлагают идентифицировать клиента по номеру телефона/email.
А уж идентифицированному клиенту ПОКАЗЫВВАТЬ все его ЛС и позволять с ними оперировать.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852795
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousА уж идентифицированному клиенту ПОКАЗЫВВАТЬ все его ЛС и позволять с ними оперировать.
И как это будет выглядеть, к примеру, на платежном терминале?
На платежных терминалах как правило подобные возможности не предусмотрены, там обычно указывается номер лицевого счета и сумма к оплате.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852797
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Alibek B.Но некоторая часть пользователей пользуются услугами в нескольких точках — у них на каждой точке свой лицевой счет, но одинаковый номер телефона. Для таких пользователей номер телефона использовать нельзя, он не является уникальным идентификатором.Alibek B.За пределами Москвы тоже есть жизнь.
это не жизнь, а сплошная борьба и преодоление, если вы ставите во главу угла создание сложностей своим пользователям. Наймите уже нормальных UX специалистов и архитекторов, да хотя бы своруйте подходы, которые уже давно придуманы. Возьмите, хотя бы билайн какой-нибудь - там вы можете управлять счетами всей семьи, не заставляя пользователя запоминать ни пароли, ни логины
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852803
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderВозьмите, хотя бы билайн какой-нибудь
Если брать какой-нибудь билайн, то там роль лицевого счета выполняет 10-значный номер телефона, который используется и для пополнения счета, и для авторизации в ЛК, и в других сценариях.
В чем тут принципиальное отличие от моего лицевого счета с 4-значным номером?
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852807
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.andrey_anonymousА уж идентифицированному клиенту ПОКАЗЫВВАТЬ все его ЛС и позволять с ними оперировать.
И как это будет выглядеть, к примеру, на платежном терминале?
Оплата по номеру платежного документа (квитанции, инвойса).
Оплата на номер телефона/email.
В приличных кассах можно сканировать штрих-код или QR.
Те, у кого "много точек", не пойдут платить в терминал - у обеспеченных людей, как правило, есть банковский счет и оплачивать услуги удобнее переводом.
Старики скорее по старинке пойдут "в сберкассу" с квитанцией.

Кроме того, платежные терминалы уже начинают отмирать.

Ваши клиенты оценят возможность оплаты с компьютера/мобильного устройства в ЛК, в который попадут по логину или номеру телефона - без необходимости переться к терминалу.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852810
feagor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alibek B.xtenderВозьмите, хотя бы билайн какой-нибудь
Если брать какой-нибудь билайн, то там роль лицевого счета выполняет 10-значный номер телефона, который используется и для пополнения счета, и для авторизации в ЛК, и в других сценариях.
В чем тут принципиальное отличие от моего лицевого счета с 4-значным номером?
вы путаете. роль лицевого счета там выполняет такой лицевой счёт. а вот методом идентификации является номер телефона.
Не заставляйте пользователей запоминать только для вас важные цифры. Свой номер телефон пользователь знает итак. Ваш номер никто специально запоминать не будет в большинстве случаев
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852813
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Alibek B.На платежных терминалах как правило подобные возможности не предусмотреныпредусмотрены, и даже есть проверки лимитов пополнения, существования счета, соответствия адресов и тд
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852819
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Alibek B.там роль лицевого счета выполняет 10-значный номер телефонанет, лицевой счет это другое. У человека может быть несколько лицевых счетов. К каждому лицевому счету может быть привязано несколько номеров. Более того, номера могут меняться. Не путайте это с авторизацией.

Или чтобы было проще - сравните с авторизацией в Сбер, Тиньков, Альфабанка и тд по номеру телефона, и там тоже может быть по несколько счетов.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852821
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feagorНе заставляйте пользователей запоминать только для вас важные цифры.
Я эту точку зрения и в первый раз понял.
Точка зрения ясна.
Указанный номер правильнее всего будет назвать клубной картой, а не просто лицевым счетом.
Это не так востребовано, как номер телефона, но и не является каким-то абстрактным числом, нужным только раз в месяц для пополнения счета — с помощью указанного номера и пароля осуществляется подключение к различным онлайн-сервисам.
Так что этот 4-значный номер вполне может и запомнить.
Номер телефона тут не подходит в силу его неуникальности.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852822
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Alibek B.,

вы реально "злобные буратины"... Что за ненависть к пользователям?
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852823
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Номер телефона тут не подходит в силу его неуникальности.
ШО???
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852836
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Указанный номер правильнее всего будет назвать клубной картой, а не просто лицевым счетом.
Это не так востребовано, как номер телефона, но и не является каким-то абстрактным числом, нужным только раз в месяц для пополнения счета — с помощью указанного номера и пароля осуществляется подключение к различным онлайн-сервисам.

Давайте еще раз, по порядку и медленно.
1. Тезис о том, что номер ЛС обычному гражданину в нормальной ситуации требуется чаще, чем раз в месяц - ложен. Первые несколько дней, пока человек играет в подписки/отписки - да, дальше - нет.

2. Разделите две сущности: субъект, которого требуется идентифицировать, и объект, для доступа к которому он авторизован.
Связь между этими сущностями, в общем случае, многие-ко-многим, т.е. вносить деньги по ЛС может, вообще говоря, любой член семьи, и у любого члена семьи может быть несколько лицевых счетов.
Более того, у субъекта может быть несколько идентификаторов-псевдонимов (два телефона, три email, логин)
Тогда схема будет классическая:
- Аутентификация субъекта (установление личности по номеру телефона/email/логин_паролю)
- Авторизация (определение множества ЛС, с которыми может оперировать субъект)

Для лишенцев, которые зачем-то платят комиссию терминаловладельцам, можно оставить возможность платить прямо на ЛС или обеспечить более сложный протокол с отображением доступных для субъекта операций.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852862
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Для проверок типа "каждый сотый" разумеется будут использоваться свои собственные счетчики (критерии), поэтому способ выделения номеров может быть любым, хоть последовательный, хоть рандомный.
Но если он будет последовательный, то пользователи будут думать, что призовым будет номер, оканчивающийся на два нуля, и будут пытаться его получить. Ну либо будут пытаться получить красивый номер из каких-то других соображений.
Чтобы таких мотивов у них не было, я хочу выдавать рандомные номера.

Тогда проще выдавать номера последовательно, но пользователю отображать не номер n, а f(n) - некую биекцию, которой пользователь не поймет как манипулировать. Например, выбрать произвольную перестановку цифр, сделать с ними еще битовый ксор у соседних цифр, и в конец дописать еще две цифры - какой-нибудь остаток от деления на 79. Дешифровывается однозначно, но для пользователя становится случайным набором цифр.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852866
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValergradТогда проще выдавать номера последовательноУ автора уже есть пул номеров. Что может проще where rownum=1.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852874
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сдаюсь.
Зарезервировал красивые номера и оставил последовательную выдачу оставшихся с rownum=1.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852880
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Номера зарезервировал так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with M as
(
select '(\d)\1\1\1' P from DUAL
union all select '(\d)(\d)\2\1' from DUAL
union all select '(\d)(\d)00' from DUAL
union all select '00(\d)(\d)' from DUAL
union all select '(\d)\1\1\d' from DUAL
)
select distinct num
from numbers N
join M on regexp_like(to_char(num, 'FM0000'), '^'||M.P||'$')



Не поделитесь, какие еще маски можно добавить для резервирования?
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852893
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

цель резервирования? для знакомых?

.....
stax
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852895
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее для сотрудников и сервисных аккаунтов.
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852899
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

хотел зарезервировать 777 получил ORA
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
SQL> with M as
  2  (
  3  select '(\d)\1\1\1' P from DUAL
  4  union all select '(\d)(\d)\2\1' from DUAL
  5  union all select '(\d)(\d)00' from DUAL
  6  union all select '00(\d)(\d)' from DUAL
  7  union all select '(\d)\1\1\d' from DUAL
  8  )
  9  ,n as (select 7 num from dual)
 10  select distinct num
 11  from n N
 12  join M on regexp_like(to_char(num, 'FM0000'), '^'||M.P||'$')
 13  /

       NUM
----------
         7

SQL> ed
Wrote file afiedt.buf

  1  with M as
  2  (
  3  select '(\d)\1\1\1' P from DUAL
  4  union all select '(\d)(\d)\2\1' from DUAL
  5  union all select '(\d)(\d)00' from DUAL
  6  union all select '00(\d)(\d)' from DUAL
  7  union all select '(\d)\1\1\d' from DUAL
  8  )
  9  ,n as (select 777 num from dual)
 10  select distinct num
 11  from n N
 12* join M on regexp_like(to_char(num, 'FM0000'), '^'||M.P||'$')
SQL> /
with M as
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel



.....
stax
...
Рейтинг: 0 / 0
Получить случайную строку из выборки
    #39852914
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любопытно.
После случайного количества запусков сессия обрывается.
Но если в сравнении убрать символ $, то работает нормально:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
with M as
(
 select '(\d)\1\1\1' re from DUAL
 union all select '(\d)(\d)\2\1' from DUAL
 union all select '(\d)(\d)00' from DUAL
 union all select '00(\d)(\d)' from DUAL
 union all select '(\d)\1\1\d' from DUAL
 )
, N as (select 777 num from dual)
select distinct num
from N
join M on regexp_like(to_char(num, 'FM0000'), '^'||re)


Или какой-то глюк самого Oracle, или to_char добавляет в конец строки какой-то невидимый символ.
...
Рейтинг: 0 / 0
85 сообщений из 85, показаны все 4 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Получить случайную строку из выборки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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