question Опубликовано 7 февраля, 2019 Автор Жалоба Поделиться Опубликовано 7 февраля, 2019 Проблема была лишь в том, что я передавал массив. Переписал функцию update_stock public function update_stock($id, $stock) { if($stock == 'символ_бесконечности' || $stock == '') $stock = null; $query = $this->db->placehold("UPDATE __variants SET `stock`=? , `stockchanged` = NOW() WHERE id=? LIMIT 1", $stock, intval($id)); $this->db->query($query); return $id; } Теперь работает нормально. Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 7 февраля, 2019 Жалоба Поделиться Опубликовано 7 февраля, 2019 Вы хотите сказать, идея нормальная, реализация плохая? Я не знаю, какова Ваша реализация. Если опишете свою реализацию точно и полностью, а не отдельными обрывками, как сейчас, тогда можно будет обсуждать по существу. Цитата Ссылка на сообщение Поделиться на другие сайты
question Опубликовано 7 февраля, 2019 Автор Жалоба Поделиться Опубликовано 7 февраля, 2019 Интересно, почему запрос UPDATE s_variants SET `stock`='77' , `stockchanged` = NOW() WHERE id=6128 AND (SELECT stock FROM s_variants WHERE id=6128 LIMIT 1) < '77' LIMIT 1 не хочет работать? #1093 - Не допускается указание таблицы 's_variants' в списке таблиц FROM для внесения в нее изменений Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 7 февраля, 2019 Жалоба Поделиться Опубликовано 7 февраля, 2019 Потому что такие правила у MySQL.Может, надо попроще, например:UPDATE s_variants SET `stock`='77' , `stockchanged` = NOW() WHERE id=6128 AND stock< '77' Цитата Ссылка на сообщение Поделиться на другие сайты
question Опубликовано 7 февраля, 2019 Автор Жалоба Поделиться Опубликовано 7 февраля, 2019 Потому что такие правила у MySQL.Может, надо попроще, например:UPDATE s_variants SET `stock`='77' , `stockchanged` = NOW() WHERE id=6128 AND stock< '77'Мне нужно обновить поле stock, а stockchanged обновлять только при условии, когда stock<77. Это возможно сделать одним запросом? Или только два UPDATE-запроса? Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 7 февраля, 2019 Жалоба Поделиться Опубликовано 7 февраля, 2019 UPDATE s_variants SET `stock`='77' , `stockchanged` = if(stock<77, NOW(), stockchanged) WHERE id=6128 AND stock< '77' Цитата Ссылка на сообщение Поделиться на другие сайты
question Опубликовано 7 февраля, 2019 Автор Жалоба Поделиться Опубликовано 7 февраля, 2019 UPDATE s_variants SET `stock`='77' , `stockchanged` = if(stock<77, NOW(), stockchanged) WHERE id=6128 AND stock< '77'Огромное спасибо. Хоть буду знать на практике, как пишутся условия в SQL. Вот только последнее AND stock< '77' явно лишнее. Цитата Ссылка на сообщение Поделиться на другие сайты
question Опубликовано 7 февраля, 2019 Автор Жалоба Поделиться Опубликовано 7 февраля, 2019 Я не знаю, какова Ваша реализация. Если опишете свою реализацию точно и полностью, а не отдельными обрывками, как сейчас, тогда можно будет обсуждать по существу.Для начала опишу задачу. Склад (в смысле консультация, бронь, приём заказов) работает 24/7/365, но на отгрузку - только в определённое время.Звонит покупатель, спрашивает, есть ли такой-то товар в наличии, а принимающий звонок - он человек: он может есть, ехать в машине, быть на месте у какого-либо покупателя и т.д., а ответить должен здесь и сейчас.Вопросы стандартные:1. есть, нету?2. А сколько есть?3. Сколько стоит?4. Забронируйте до понедельника.И для этого есть склад - буклет с наличием, в котором чёркают, комментируют и т.д, и есть прайс - ещё больший буклет. Также есть отдельный список скидок для каждого клиента, а есть список того, что заказано на фабрике, но пока не поступило на склад, но это уже детали.Вот чтобы в любой момент я мог зайти, допустим, с планшета по известному только мне адресу и выполнить пункты 1, 2, 3, 4, я и пытаюсь реализовать то, что описано с самого начала топика.Для начала была взята стандартная админка Симплы, откуда были выкинуты ненужные модули, скрипты (а их там на мегабайт) и оставлен только функционал редактирования количества.Далее - сохранение количества без перезагрузки страницы.Далее - дата изменения количества.Комментарий (например, Иванов забронировал 2 штуки до понедельника)ЦенаНу и при изменении количества в плюс, меняется "дата получения", в минус - "последняя продажа".Пока вот так. Цитата Ссылка на сообщение Поделиться на другие сайты
question Опубликовано 7 февраля, 2019 Автор Жалоба Поделиться Опубликовано 7 февраля, 2019 UPDATE s_variants SET `stock`='2', `stockchanged` = if(stock<'2', NOW(), stockchanged) WHERE id=6128 не работает UPDATE s_variants SET `stock`='2' , `stockchanged` = if(stock<2, NOW(), stockchanged) WHERE id=6128 AND stock< '2' тоже не работает Цитата Ссылка на сообщение Поделиться на другие сайты
question Опубликовано 7 февраля, 2019 Автор Жалоба Поделиться Опубликовано 7 февраля, 2019 Эврика! Их просто нужно поменять местами!!! UPDATE s_variants SET `stockchanged` = if(stock<'5', NOW(), stockchanged), `stock`='5' WHERE id=6083 Работает. Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.