@phpclubru

Страница 720 из 956
Terminator
18.12.2018
19:57:19
@yura_v_007 будет жить. Поприветствуем!

Юрий
18.12.2018
19:59:06
Привет! подскажите как сгенерировать уникальный order_id для заказа если в БД более 500 000 заказов? Заказы хранятся в таблице ORDERS order_id должен быть в диапазоне от 0 до 99999999 Целым. Уникальным полем в таблице ORDERS есть order_id. Поле id в таблице ORDERS - это auto_increment Пример.. пред order_id = 100 если использовать auto_increment для поля order_id то след order_id будет 101 и клиент если делает часто заказы сможет иметь представление о кол-ве заказов что делает магазин в любой пром. времени. нужно, чтобы след order_id - было случайным УНИКАЛЬНЫМ ЦЕЛЫМ числом в диапазоне от 1 до 999999 или больше .. даже если в таблице ORDERS будет всего 100 строк то их order_id должны быть случайными и уникалыными.. из диапазона выше. Пример в таблице 100 строк order_id = 34553 order_id = 5 order_id = 898797 и т.д. еще 97 строк и все они с УНИКАЛЬНЫМ СЛУЧАЙНЫМ order_id —---------------------------------— Мой алгоритм верный или есть более правильный? order_id должен быть в диапазоне от 0 до 9999999 Целым. 1 взять все order_id из таблицы ORDERS и сохранить массив в $db_orders 2 $tmp_order_id = rand(0, 99999999); 3. in_array($tmp_order_id, $db_orders) - Если в массиве - формируем новый случ $tmp_order_id и выполняем снова проверку на шаге 3. 4 если не в масиве - пишем в БД Этот алгоритм сработает, если в БД мало order_id а как быть если order_id в БД больше 500 000?

Серёга
18.12.2018
20:04:50
Привет! подскажите как сгенерировать уникальный order_id для заказа если в БД более 500 000 заказов? Заказы хранятся в таблице ORDERS order_id должен быть в диапазоне от 0 до 99999999 Целым. Уникальным полем в таблице ORDERS есть order_id. Поле id в таблице ORDERS - это auto_increment Пример.. пред order_id = 100 если использовать auto_increment для поля order_id то след order_id будет 101 и клиент если делает часто заказы сможет иметь представление о кол-ве заказов что делает магазин в любой пром. времени. нужно, чтобы след order_id - было случайным УНИКАЛЬНЫМ ЦЕЛЫМ числом в диапазоне от 1 до 999999 или больше .. даже если в таблице ORDERS будет всего 100 строк то их order_id должны быть случайными и уникалыными.. из диапазона выше. Пример в таблице 100 строк order_id = 34553 order_id = 5 order_id = 898797 и т.д. еще 97 строк и все они с УНИКАЛЬНЫМ СЛУЧАЙНЫМ order_id —---------------------------------— Мой алгоритм верный или есть более правильный? order_id должен быть в диапазоне от 0 до 9999999 Целым. 1 взять все order_id из таблицы ORDERS и сохранить массив в $db_orders 2 $tmp_order_id = rand(0, 99999999); 3. in_array($tmp_order_id, $db_orders) - Если в массиве - формируем новый случ $tmp_order_id и выполняем снова проверку на шаге 3. 4 если не в масиве - пишем в БД Этот алгоритм сработает, если в БД мало order_id а как быть если order_id в БД больше 500 000?
Если у тебя клиент и так идентифицирован то не проще клиенту хэш по конкатенации значений отдавать sha1(101 . "Пупкин");

Юрий
18.12.2018
20:06:50
Если у тебя клиент и так идентифицирован то не проще клиенту хэш по конкатенации значений отдавать sha1(101 . "Пупкин");
клиент может позвонить менеджеру и узнать инф по заказу и будет сообщать менеджеру order_id что видит у себя в кабинете.. как тогда менеджер найдет такой ордер в своей админке

Google
Серёга
18.12.2018
20:07:44
Если так согласен, а отдельно хранить этот хэш возможно жирно

Хотя ничего не жирно uid для клиента генеришь и по нему будешь искать

Юрий
18.12.2018
20:10:45
Хотя ничего не жирно uid для клиента генеришь и по нему будешь искать
тоже не подходит... клиенту тогда нужно запоминать свой user_id order_id сообщать это менеджеру по телефоне и менеджер как-то там это все должен найти

мне просто нужно вставлять в БД Уникальные order_id которых в БД нету.. а если они там есть - формировать новый

Серёга
18.12.2018
20:13:45
А, что, прикольно, sha1 продиктовал по телефону?

Юрий
18.12.2018
20:14:57
А, что, прикольно, sha1 продиктовал по телефону?
мне не до шуток) надо как-то это решить.. если кто поможет я очень признателен!

надо просто чтобы клиент диктовал менеджеру ЦИФРЫ.. в диапазоне от 1 до 9999999 .. никаких букв.. НОВАЯ ПОЧТА как то же решила такую задачу..

У новой почты там вообще в номерах по от 12 до 14 цифр!

Серёга
18.12.2018
20:19:25
У новой почты там вообще в номерах по от 12 до 14 цифр!
-> Пример.. пред order_id = 100 если использовать auto_increment для поля order_id то след order_id будет 101 и клиент если делает часто заказы сможет иметь представление о кол-ве заказов что делает магазин в любой пром. времени. У тебя один клиент и он часто делает заказы получается?

Серёга
18.12.2018
20:25:14
Блин, ну, удиви клиентов сделай ауто_декремент

Юрий
18.12.2018
20:25:52
Если разбить SQL SELECT order_id на несколько частей при которых может возвращаться массив $result cодерж до 100 000 строк и поочередно проверять in_array($tmp_order_id, $result) - если не найден, отправляем след запрос со смещением и получаем новые данные ... если же найден - формируем новый $tmp_order_id и выполняем заново SQL SELECT order_id

Google
Серёга
18.12.2018
20:40:44
microtime и тот интереснее выглядит))))

dypa
18.12.2018
20:44:40
клиент может позвонить менеджеру и узнать инф по заказу и будет сообщать менеджеру order_id что видит у себя в кабинете.. как тогда менеджер найдет такой ордер в своей админке
по номеру телефона конечно менеджер узнает клиента, а номер заказа не все клиенты помнят, да и вообще мало чего они помнят о своих заказах )

dypa
18.12.2018
20:45:40
А некоторые и номера не знают)
атс знает с какого номера идет звонок

Серёга
18.12.2018
20:46:30
Юрий
18.12.2018
20:46:38
по номеру телефона конечно менеджер узнает клиента, а номер заказа не все клиенты помнят, да и вообще мало чего они помнят о своих заказах )
клиент может звонить не с того номера что прописан в профиле.. все эти предлодения - не голятся.. я все это продумывал

dypa
18.12.2018
20:49:08
Юрий
18.12.2018
20:49:57
microtime точно продумывал? :)
а что мне даст микротайс кроме как времени выполнения запроса.. я и так знаю что нужно обработать большой массиы и это будет не быстро.. вот и ищу самый эффективный способ



это мне на форуме написали.. но я не понимаю как это сделать и что такое захардкоженая константа но при таком случае тоже как менеджер будет искать этот заказ в своей админке..

Pavel
18.12.2018
20:53:06
почему не взять uuid то?

Юрий
18.12.2018
20:54:09
почему не взять uuid то?
что это такое? поясните не знаю об этом

dypa
18.12.2018
20:54:26
Pavel
18.12.2018
20:54:49
это просто стандарт на рандомный 16байтный айдишник

Юрий
18.12.2018
20:59:06
т.е. вы предлагаете перед добавлением в БД ордера формировать UUID , потом проверять, есть ли в БД ордер с ранее сформир UUID - если нету - добавляем ордер, если есть - формируем новый UUID и т.д ?

т.е. это как фингерпринт ордера

но тогда все-равно нужно для ордера как-то установить УНИКАЛЬНЫЙ НОМЕР ОРДЕРА.. Который должен быть исключит из цифр которые клиенту легко будет сообщить менеджеру по телефону.. и по которым менеджер найдет этот ордер в своей админке.. я не понимаю, как тогда устанавливать уникальный ORDER_ID.. или я тупой или я что-то не понимаю

Google
Юрий
18.12.2018
21:04:48
зачем привязываться к цифрам? сколько заказов в день совершает клиент?
потому-что цифры лугче всего диктуются по телефону!! никто по телефону буквы нормально не продиктует и не напишет из в строке поиска в админке

Юрий
18.12.2018
21:06:30
спорно
больше 90% вероятности ошибок при вводе букв и понимании их

dypa
18.12.2018
21:07:07
Да. Но скорее всего за все наши жизни у тебя ни разу не случится коллизий
вообще коллизию uuidv4 не сложно получить, тк генерация зависит от времени

Юрий
18.12.2018
21:07:33
dypa
18.12.2018
21:08:14
на второй вопрос я так и не услышал ответ

больше 90% вероятности ошибок при вводе букв и понимании их
раз так любишь проценты - какова вероятность того, что клиент сделает 2 одновременных заказа с точностью до секунды? даты и время у нас записываются в виде цифр?

Юрий
18.12.2018
21:12:26
мне надо цифры как уникальный идентификатор ордера который клиент будет говорить по телефону! менеджерам и мне и всем легче говорить цифры.. и их быстрее вводить в поиске.. цифр всего 10 а букв минимум в 2 раза больше!

это должны быть только цифры.. !!!

sergey
18.12.2018
21:13:46
даже в магазинах типа леруа мерлен или максидома просят назвать последние три цифры заказа

и всем все понятно

dypa
18.12.2018
21:16:42
это должны быть только цифры.. !!!
и? на поставленные выше вопросы постарайся ответить - можеь быть сам догадаешься.0

Юрий
18.12.2018
21:19:28
даже в магазинах типа леруа мерлен или максидома просят назвать последние три цифры заказа
ну правильно.. просят же цифры назвать а не буквы.. занчит у них как уникальный идентифк заказа используются цифры.. могут конечно быть и буквы.. но в начале или в конце.. но основой являются именно цифры..

sergey
18.12.2018
21:20:29
там @уева туча цифр и пара букв. Но они никому не нужны на практике

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

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

Google
Юрий
18.12.2018
21:25:39
если ты пришел не туда или не вовремя, диктуешь весь номер и тебе говрят что не так.
вот правильно. значит мне тоже нудно сформировать эту мега кучу цифр - проверить, содержится ли она в какой-то строке в БД - если нет - то создать ордер с этим идентификатором - если содердится - формируем новую кучу фицр и снова проверяем..

sergey
18.12.2018
21:25:58
и какие проблемы?

Юрий
18.12.2018
21:26:06
короче сейчас задача сводится к тому.. как эту кучу цифр формировать..

это должна быть строка с фиксир ко-вом цифр. 8, к примеру.. и всегда должны формироваться уникальных 8 цифр.. но не 7 или не 1 а 8 как это сделать?

sergey
18.12.2018
21:27:49
сгенери сразу милион или милиард в отдельную таблицу с полями id autoinc, is_used и выбирай where id>rand(придумай сам) and is_used=0

limit1

dypa
18.12.2018
21:28:36
и какие проблемы?
проблема в том, что парень не хочет думать и разбираться с бизнес областью

sergey
18.12.2018
21:29:25
=) classic

Юрий
18.12.2018
21:29:56
проблема в том, что парень не хочет думать и разбираться с бизнес областью
я думаю! и очень много.. почему вы считаете что яне хочу думать..

Andrey
18.12.2018
21:30:24
Сделай селект с рандомом из чисел за исключением существующих

dypa
18.12.2018
21:30:28
раз так любишь проценты - какова вероятность того, что клиент сделает 2 одновременных заказа с точностью до секунды? даты и время у нас записываются в виде цифр?

Юрий
18.12.2018
21:33:41
раз так любишь проценты - какова вероятность того, что клиент сделает 2 одновременных заказа с точностью до секунды? даты и время у нас записываются в виде цифр?
ничтожно маленькая.. и вы хотите чтобы я именно идентификатор времени в милисекундах использовал как уникальный идентификатор заказа

ну так и сделаю!

sergey
18.12.2018
21:34:00
но тогда твои клиенты просекут

чтото

особнно прошареные конкуренты

=)))

Юрий
18.12.2018
21:39:53
echo rand(1000, 9999) . rand(1000, 9999);

echo rand(1000, 9999) . '-'.rand(1000, 9999);

вот так пойдетт

Google
sergey
18.12.2018
21:47:04
гениально

dypa
18.12.2018
21:47:18
sergey
18.12.2018
21:47:19
и это стоило таких рассуждений?

=) Нет, ну в прицнипе для начинающих рассуждать полезно, ничего против не имею

Помню на заре пхпшничества во вермена пхп4 был заказ сгенерить 100к уникальных номеров. На дюрон 700 генерил больше суток примерно таким же методом м добавляя в unique индекс майскуля

хорошо зима была, а так бы сгорел дюрон )

dypa
18.12.2018
21:49:55
особнно прошареные конкуренты
сама по себе дата(номер заказа) не поможет аунтефикации по телефону, придется еще номер телефона знать или пинкод(но вариант так себе)

Юрий
18.12.2018
21:50:57
echo str_pad(mt_rand(1,9999),4,'0',STR_PAD_LEFT).'-'.str_pad(mt_rand(1,9999),4,'0',STR_PAD_LEFT)

sergey
18.12.2018
21:51:04
сама по себе дата(номер заказа) не поможет аунтефикации по телефону, придется еще номер телефона знать или пинкод(но вариант так себе)
я подумал было, что можно узнать сколько было заказов с времени а до времени б, но на самом деле нельзя. Их было столько же, сколько было милисекунд =)

Юрий
18.12.2018
21:51:05
djn nfr tot kexit

echo str_pad(mt_rand(1,9999),4,'0',STR_PAD_LEFT).'-'.str_pad(mt_rand(1,9999),4,'0',STR_PAD_LEFT)

вот хороший вариант

sergey
18.12.2018
21:51:40
А угадать милисекунду с первого раза, это как угадать пароль админа магазина )

dypa
18.12.2018
21:51:50
А угадать милисекунду с первого раза, это как угадать пароль админа магазина )
да миллисекунда там не нужна, достаточно datetime главное запретить создание дубля заказа

sergey
18.12.2018
21:54:07
*если не полагаться на бд

аесли полагаться, то уник поле

dypa
18.12.2018
21:55:25
задача кстати не тривиальная
ну да, нужно писать еще скрипты общения для сотрудников, атс настроить на определение номеров

sergey
18.12.2018
21:55:38
=)))

Страница 720 из 956