powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Получить случайную строку из выборки
10 сообщений из 85, страница 4 из 4
Получить случайную строку из выборки
    #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
10 сообщений из 85, страница 4 из 4
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Получить случайную строку из выборки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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