Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Блокировки в MySQL [2]
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
На примере файла - коннектов/запросов/транзакций можно делать несколько, и лочить файл не на весь процесс формирования заказа, а только на момент апдейта данных в БД - это доли секунды.
чо то уже потерял нить рассуждений - зачем какой то файл и зачем его лочить. какую проблему он решает которую не решает БД. в которой и так данные лочатся на момент апдейта.
тем более как я уже писал проблема надуманая.
Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010
Помог: 69 раз(а)
После того как пользователь нажал заказать. Проверяйте есть ли на данный момент такое количество товара. Если есть то оформляйте и т.д. Если нет, выдавайте сообщение, что к сожалению товар ужу закончился. Все больше думать не чего. caballero прав абсолютно, в том плане, что если юзер, положил товар в корзину, то списывать его со склада еще "очень рано".Т.к юзер может и очистить корзину и т.д.
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
tuareg пишет:
caballero прав абсолютно, в том плане, что если юзер, положил товар в корзину, то списывать его со склада еще "очень рано".Т.к юзер может и очистить корзину и т.д.
Я так и не оспариваю его правоту в этом.
ТС хочет защититься от ошибок в момент нажатия кнопки "заказать". Я показал как это сделать.
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
ТС хочет защититься от ошибок в момент нажатия кнопки "заказать".
Никаких ошибок не будет если перед снятием товара еще раз проверять его наличие.
а если сначала снимать а потом не закрывая транзакцию проверить не ушел ли в минус - вообще проблеммы снимаются. при правильном уровне изоляции транзакций, разумеется.
Покинул форум
Сообщений всего: 9
Дата рег-ции: Май 2012
Помог: 0 раз(а)
caballero пишет:
Никаких ошибок не будет если перед снятием товара еще раз проверять его наличие.
а если сначала снимать а потом не закрывая транзакцию проверить не ушел ли в минус - вообще проблеммы снимаются. при правильном уровне изоляции транзакций, разумеется.
Тогда пользователи могут ведь назаказывать больше чем есть на складе, пусть это всё будет в резерве, но тогда придётся многим пользователям отказывать в их заказе, по причине нехватки товара. И это не хорошо, ведь когда он заказывал мы сообщили ему что товара достаточно. Я думаю это не правильно, на уровне взаимодействия с пользователем.
Мне кажется запрос предложенный, Мелкий, решает эту проблему.
UPDATE products SET qty=qty-$qty WHERE`id`=$prod_id AND qty>=$qtu;
Есть какие либо возможности, чтобы съимитировать эту ситуацию одновременного заказа, на компьютере и проверить, так ли это? Может быть вставить паузу?
tuareg
Отправлено: 17 Мая, 2012 - 16:10:13
Участник
Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010
Помог: 69 раз(а)
У меня в корзине лежит товар №1. Я добавляю товар №2. Прибавлении товара №2 я проверяю есть ли(не изменилось ли количество) товар №1
mag1K
Отправлено: 17 Мая, 2012 - 16:14:02
Новичок
Покинул форум
Сообщений всего: 9
Дата рег-ции: Май 2012
Помог: 0 раз(а)
tuareg пишет:
У меня в корзине лежит товар №1. Я добавляю товар №2. Прибавлении товара №2 я проверяю есть ли(не изменилось ли количество) товар №1
Что простите?
tuareg
Отправлено: 17 Мая, 2012 - 16:17:02
Участник
Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010
Помог: 69 раз(а)
Тут по любому они смогут это сделать. Но если при каждом добавлении товара в корзину, я буду проверять есть ли кол-во, товаров, которые уже в корзине, тогда онине смогут назаказывать много. Но увеличится нагрузга на БД
mag1K
Отправлено: 17 Мая, 2012 - 16:21:17
Новичок
Покинул форум
Сообщений всего: 9
Дата рег-ции: Май 2012
Помог: 0 раз(а)
tuareg пишет:
Тут по любому они смогут это сделать. Но если при каждом добавлении товара в корзину, я буду проверять есть ли кол-во, товаров, которые уже в корзине, тогда онине смогут назаказывать много. Но увеличится нагрузга на БД
Тоесть придётся, перед каждый заказом товара, искать все резервы на этот заказ и проверить суммарное количество всех заказов вместе с нашим не превышает ли количество товара на складе? как вариант, но мне кажется это уже не к чему, поскольку как я сказал выше в моём случае всё должно решатся этим простым запросом.
Как бы это теперь проверить?)
tuareg
Отправлено: 17 Мая, 2012 - 16:27:27
Участник
Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010
Помог: 69 раз(а)
Вам не нужен резерв. Зачем он? Например, то что я положил в корзину не значит, что я это купил... Просто проверяйте хватает ли? если да то продавайте.
P.S Страшный сон. Я Ваш конкурент. Пишем программу, которая кладет все Ваши товары в корзину, а по истечении какого-то времени, говорит, что ошиблась, не нужны мне эти товары. Пока товары в корзине, их никто другой купить не сможет. Ну а дальше....
caballero
Отправлено: 17 Мая, 2012 - 16:32:26
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
но тогда придётся многим пользователям отказывать в их заказе, по причине нехватки товара.
или уволить менеджера отвечающего за поставки на склад
Цитата:
И это не хорошо, ведь когда он заказывал мы сообщили ему что товара достаточно.
если он с этой корзиной полчаса лазил по сайту то он должен понимать что сообщение несколько устарело
Цитата:
Тут по любому они смогут это сделать. Но если при каждом добавлении товара в корзину, я буду проверять есть ли кол-во, товаров, которые уже в корзине, тогда онине смогут назаказывать много. Но увеличится нагрузга на БД
проверять на самом деле нужно только при формировании ордера. А если товар закончился его нужно не показывать в списке или не давать юзеру добавлять. (обычная надпись в инет магазинах "нет в наличии")
Цитата:
Как бы это теперь проверить?)
сначала подумай как юзер узнает о результате твоего запроса .
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.