[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Уникальный номер заказа
Страницы: 1, 2
Michael
Цитата (Valick @ 25.11.2019 - 00:26)
Michael, ты просил код, ну вот:

Я просил?
Он не мне нужен, а ТС-у, а до него ты уверен что достучишься через столько времени?

Глянул твое решение, довольно забавно, номерки он уже заранее поназначал rolleyes.gif .
И зачем тогда этот update с left join?
В твоем решении есть одна большая проблема, вот из книги:
Цитата
В последовательности значений, присвоенных столбцу AUTO_INCREMENT, могут появляться пропуски. Это связано с откатами транзакций


_____________
There never was a struggle in the soul of a good man that was not hard
Valick
Цитата (Michael @ 25.11.2019 - 09:26)
ты уверен что достучишься через столько времени?

абсолютно уверен, что не достучусь, даже если ТС вернётся и увидит код.

Цитата (Michael @ 25.11.2019 - 09:26)
В твоем решении есть одна большая проблема

ну я бы так сказал, это не моя проблема, а проблема транзакций smile.gif
честно говоря тут вообще нет смысла в транзакции (и её у меня нет, хотя я думаю ты уже заметил) ибо главное - это один единственный insert
ролбэк транзакции сделает дырку только при удачном инсёрте и неудачных последующих операциях

Цитата (Michael @ 25.11.2019 - 09:26)
И зачем тогда этот update с left join?

там по полю ордер происходит выборка заказов, отсутствие значения (null) говорит о том, что заказ "удалён" на самом деле он не удалён и его можно восстановить.

Цитата (Michael @ 25.11.2019 - 09:26)
номерки он уже заранее поназначал

никогда не видел номерные бланки или заготовку паспорта? там номера отпечатаны в типографии их никак нельзя изменить и это гарантирует, что двух одинаковых номеров не будет.

_____________
Стимулятор ~yoomoney - 41001303250491
comolov
// Инициализация таблиц базы данных
if ($_REQUEST['create_db']??false == 'yes') {
createOrderTable($mysqli);
createIdentifierTable($mysqli);
header("Location: " . $_SERVER['PHP_SELF'] . '?action=order');
}


Valick, ведь if не сработает так как ожидалось. Приоритет == выше чем ??. Или как, что ожидалось от ифа?

$_REQUEST = [];
$_REQUEST['create_db'] = 'yes';

var_dump($_REQUEST['create_db'] ?? false == 'yes');
echo '<br>';
var_dump(($_REQUEST['create_db'] ?? false) == 'yes');
echo '<br>';
var_dump($_REQUEST['create_db'] ?? (false == 'yes'));

...


string(3) "yes"
bool(true)
string(3) "yes"
Valick
comolov, хм, спасибо, не обратил внимания. Кстати когда писал код тупо поленился там скобки поставить smile.gif Но что характерно срабатывало так как ожидалось. Иначе он бы мне кажный хит таблицу трункетил.
Для пущей важности можно и обернуть в скобки
($_REQUEST['create_db'] ?? false) == 'yes'
Цитата (twin @ 25.11.2019 - 06:38)
Есть GUID для этого, и не особо кто парится коллизиями))

Дядь Коль, зри в корень)) тобишь читай ТЗ))

P.S. Проверил, при неопределённой $_REQUEST['create_db'] работает как хотелось, но не так как ожидалось. comolov, ещё раз спасибо за то что обратил на внимание на эту логическую ошибку.

_____________
Стимулятор ~yoomoney - 41001303250491
twin
Цитата (Valick @ 26.11.2019 - 14:13)
Дядь Коль, зри в корень)) тобишь читай ТЗ))
Я эту ремарку тебе написал, а не ему. Насчет того, что
Цитата (Valick @ 23.11.2019 - 05:51)
не гарантирует того, что не сгенерирует одинаковую последовательность два и более раза.


А что насчет того, что буквы кончатся? А они ведь кончатся. smile.gif

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
S.Chushkin
Некий Valick на php.ru выдал решение задачки.
Решение было основано на правильной мысли, но с реализацией на уровне юниора, к сожалению. Правильная мысль состояла в том, что нужна предварительная генерация необходимого числа номеров. Это давно известное решение.
Вообще, предварительная генерация даёт:
- непрерывная последовательность номеров (отсутствие дырок)
- высокая скорость регистрации (до тысяч в секунду)
- надёжность (в т.ч. в многопоточном режиме)


В частности, это решает проблему
Цитата (twin @ 26.11.2019 - 19:06)
А что насчет того, что буквы кончатся? А они ведь кончатся.  smile.gif
простейшим способом - используя особенность инкремента в PHP при генерации номера с буковками A-Z.

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
twin
Цитата (S.Chushkin @ 26.11.2019 - 16:31)
В частности, это решает проблему
Цитата (twin @ 26.11.2019 - 19:06)
А что насчет того, что буквы кончатся? А они ведь кончатся. 
простейшим способом - используя особенность инкремента в PHP при генерации номера с буковками A-Z.
Я именно про это и спросил. Причем у всех, так как в ТЗ нет по этому поводу никаких указаний - раз, оба представленных решения заткнутся на заказе с номером Z999 + 1, два.
А то что проблема решаема, это и коню понятно. smile.gif

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Kusss
AA001 ... AB001 - и так далее ))
Valick
Kusss, этого нет в ТЗ. И скорее всего после Z999 будет ничего, так как скорее всего до этого не дойдёт, и последовательность будет обнуляться например каждый год, месяц, неделю, час в зависимости от интенсивности создания заказов.
И лично у меня есть варианты, но к чему они, когда ТС исчез и нет недостающей информации.

_____________
Стимулятор ~yoomoney - 41001303250491
twin
Valick, я почему и спросил, что этого нет в ТЗ. А теперь представьте ситуацию, что человек воспользовался советом и влепил на боевой сайт одно из представленных решений. Количество заказов при таком раскладе весьма ограничено, и через год-месяц-неделю номера закончились. И?

Прежде чем приступать к практическому решению задачи, нужно постараться рассмотреть все вероятные казусы. И либо уточнить ТЗ, либо предупредить о возможных неприятностях.

Вот про коллизии ты почему то подумал, а об этом нет.


_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Valick
Цитата (twin @ 27.11.2019 - 13:37)
Вот про коллизии ты почему то подумал, а об этом нет.

Почему ты решил, что я об этом не подумал?
Ты ходил по ссылке в первом моём посте этого топика?
Цитата

ADSoft сказал(а): ↑
а что - когда символы кончатся?
полный номер может выглядеть например так 2019-А001 или так 2019-11-А015

Ну а коллизии - это в рамках текущего ТЗ. И они гораздо страшнее, потому как могут дать два одинаковых названия заказа и это воля случая и узнать об этом можно ой как не скоро, а если теоретически закончится сгенерированный ряд, то ошибка всплывёт наружу стабильно без вариантов.

_____________
Стимулятор ~yoomoney - 41001303250491
twin
Цитата (Valick @ 27.11.2019 - 11:29)
Почему ты решил, что я об этом не подумал?
Ты ходил по ссылке в первом моём посте этого топика?

Нет, не ходил. Не имею привычки. Как впрочем и многие.
Но вопрос снимаю. smile.gif

А с коллизиями можно тоже легко бороться на уровне той же СУБД.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.