
Andrey
18.12.2018
21:56:59

Юрий
18.12.2018
21:58:11
думай дальше ...
ну так вот сформировал я 8ми $tmp_order_id значный пин заказа потом провери есть ли этот пин в БД при помощи SELECT * FROM orders WHERE order_id='$tmp_order_id'
если вернуло 0 строк - то вставляем этот заказ в БД - если нет - то генерируем новый пин и снова проверяем

sergey
18.12.2018
22:00:36
лучше попытаться сразу вставить, а поле сделать уникальным

Google

sergey
18.12.2018
22:00:40
если получилось - то ок
иначе между селект и инсерт у тебя может вклинится конкурентный заказ, сгенерить тот же номер...

Юрий
18.12.2018
22:01:44
но этот вариант что на картинке самый лучший!
спасибо за ссылку!

dypa
18.12.2018
22:02:47

sergey
18.12.2018
22:03:01
зачем усложнять
можно и транзакции
но инсерт в уникальное поле сработает и на myisam
и врядли когдато както поведет себя не так, как ожидается

dypa
18.12.2018
22:04:05

sergey
18.12.2018
22:04:11
=((
уже все?

Google

Юрий
18.12.2018
22:04:31
у меня уникальным явл order_id

sergey
18.12.2018
22:04:41

dypa
18.12.2018
22:05:34

sergey
18.12.2018
22:06:55
причем на другой включенный сервер )
Но вообще да, туда ему и дорога. Недавно тут пришлось выкурить возможности майскуля по json полям и виртуальным полям. Развивается всё

dypa
18.12.2018
22:09:26

sergey
18.12.2018
22:10:06
а как же запустить сайт прямо на хостовой машине )
в прод

Юрий
18.12.2018
22:18:07
такое поле вы же имели ввиду когда говорили про УНИКАЛЬНОЕ?

sergey
18.12.2018
22:19:20
да
их может быть 2 или 102
id надо сделать автоинкремент

Юрий
18.12.2018
22:20:26
order_id - unique

sergey
18.12.2018
22:22:06
да. вот так прямо можешь пытаться вставить новый заказ с сгенерированым order_id . Если не получилось (не вернул insert_id, но вернул ошибку), перегенерируешь order_id. И так while пока не получишь insert_id
это будет работать довольно быстро

Юрий
18.12.2018
22:23:16

Google

Юрий
18.12.2018
22:23:23
спасибо за помощь!
57-59-53-44
вот в таком формте будут order_id

sergey
18.12.2018
22:24:13
лучше храни числом, а разбивай при отображении
числом уник ищется быстрее

Юрий
18.12.2018
22:24:48
ок!!

sergey
18.12.2018
22:34:22
я так не помню. Если у тебя заведомо известное количество цифр в числе, можешь сделать так
$tmp=(string)$digit;
$formated=$tmp{0}.$tmp{1}."-".$tmp{2}.$tmp{3}."-"
и так далее
но так вроде делают только придурки как я
и на счет синтаксиса (string)$digit; я не уверен


Юрий
18.12.2018
23:59:32
function format_order_pin($pin, $options=[2,'-']) {
$pin_length = strlen($pin);
$dev = $options[0];
$delim = $options[1];
$ci = $pin_length / $dev;
$start = 0; $tmp=[];
for ($i=0; $i < $ci; $i++) {
$tmp[$i] = substr($pin, $start, 2);
$start +=$dev;
}
$ret = implode($delim, $tmp);
return $ret;
}
вот и функцию написал что из числа 99999999 делает число в формате 99-99-99-99
еще хотел спросить в каком виде лучше хранить в таблице orders информацию о товарах в заказе (СТОИМОСТЬ, кол-во, название товара, код товара, изображние).. я скланяюсь что это должен быть массив в виде строки JSON
еще хотел спросить.. я тут написал ЦМС скрипт онлайн магазина.. лайт версия и его время выполнения 0.1 секунда в среднем..это же быстро?
и это на моем планшеье с intel Atom z8350

Nibbler
19.12.2018
01:16:37
остановись.
прекратите херней страдать.
задкчка из второго класса.

Google

Nibbler
19.12.2018
01:18:03
делаешь два поля.
uuid & id где id показываешь клиенту uuid индификатор заказа в бд.
клиент счастлив, что у него простое число. бд что uuid
заказ можно json, можно набором записей в бд..

Юрий
19.12.2018
01:21:08

Nibbler
19.12.2018
01:25:32
это хэш

Pavel
19.12.2018
01:25:41
Нет есть просто функция получения uuid

Nibbler
19.12.2018
01:25:42
загугли uuid php

Pavel
19.12.2018
01:26:07
http://php.net/manual/ru/function.uniqid.php

Юрий
19.12.2018
01:26:35
спасибо ребята! вы меня хорошо просвятили!

Nibbler
19.12.2018
01:32:22
присылай гит еще не так просвятим

Юрий
19.12.2018
02:51:19
uniqidReal() из этого поста более прав вариант! ее и буду исп http://php.net/manual/ru/function.uniqid.php#120123

Valerii
19.12.2018
05:26:50
Читал Вашу ночную переписку: а не лучше ли было привязать номер заказа по типу: дата(можно даже в обратном порудке применить)+минуты+секунды... И хрен кто сможет подкопатся сколько заказов. В той же 1с создаётся дата и номер накладной на тот день... И максимум что можно понять сколько в один день...

Nibbler
19.12.2018
05:29:22

Valerii
19.12.2018
05:40:07

Nibbler
19.12.2018
05:40:36
зачем столько геммороя?
uuid + id(autoincrement)

Google

dypa
19.12.2018
07:11:00

Nibbler
19.12.2018
07:28:45

dypa
19.12.2018
07:40:36
ага.
и в чем же тогда проблема? ;)

Nibbler
19.12.2018
07:42:35
ну подумай если у тебя номер заказа составной из времени заказа.

Valerii
19.12.2018
07:44:42
ага.
Ну на краняк добавить проверку одного поля? Вместо горожения нечитабельных id....

Nibbler
19.12.2018
07:44:55
??
??

Valerii
19.12.2018
07:45:47

Nibbler
19.12.2018
07:46:09
давайте алгоритм разберем не против?
Сколько у вас опыт?

dypa
19.12.2018
07:48:04

Nibbler
19.12.2018
07:48:16
Алго предложенный вами:
1. Получаем время заказа г/м/д ч:м:с
2. Генерим уник для заказа из шаг1
3. Проверяем есть ли такая метка в БД (+1 запрос)
4. Если есть повторяем операцию с шага 1
5. Если нет то пишем. (тут есть вероятность что после шага 3 уже в БД записал кто-то с такой меткой.)