Главное в самом запросе UPDATE миносовать данные, а не тупо делать UPDATE на новые, иначе если в этот момент у кого-то будет пополнение то оно слетит из-за вашей обработке. В масштабных проектах так не делается. Это беда.
Делаются транзакции и лог всех действий (+/-), и уже потом по ним баланс подбивается.
Ну это само собой, иначе будет просто обнуление значения. Нам надо обнулить все которые будут меньше общей суммы 100.
требуемая к удалению сумма, к примеру 100
UPDATE `criptobot`.`birbot` SET `volcoin` = '0' WHERE `birbot`.`volcoin` =10;
UPDATE `criptobot`.`birbot` SET `volcoin` = '0' WHERE `birbot`.`volcoin` =80;
UPDATE `criptobot`.`birbot` SET `volcoin` = '40' WHERE `birbot`.`volcoin` =50;
Мы сделали 100. Последний отнимает не достающую сумму а остаток возвращает в базу.
У вас структура БД для такой задачи ужасная. Никто так не делает. Делайте как вам выше советовали одну таблицу с балансом пользователей, а другую таблицу с транзакциями. В первую записываете итоговый баланс пользователя после манипуляций, а во вторую прибавления и вычитания по пользователю. Сами транзакции делаете на PHP, либо через процедуры и функции MySQL (но так в разы сложнее).
У меня в базе много таблиц, просто у меня бот в этой таблице должен забирать произвольные суммы и перемещать в историю сделок. а эти
данные убирать из базы совсем.
Можно даже сразу удалять в место UPDATE если `summ` ='0
Просто думал сделать как то проще.
А проще не получается.
Это делает для личного использования, а таблица взята из сети для примера.
В таблице лежит сумма, в каждой строке сумма разная.
Задача набрать сумму и удалить пустые строки в таблице.
Решил с помощью PHP задачу.
Хотя насколько оно правильно не знаю.
Делается запрос в базу, выбирается в цикле весь столбец (id и summ ) , к сожалению как выбрать именно нужное количество строк я не знаю.
Дальше в цикле проверяю нужную сумму в каждой строке. пример ниже
id autoincrement summ ячейка данных
$tcrow=120; #Сумма которую нам необходимо извлечь $result = $mysqli->query('SELECT `t2`.`id`,`t2`.`summ` FROM `t2` where id order by id asc '); while($row = $result->fetch_assoc())// получаем все строки в цикле по одной { $id = $row['id'] ; $summm= $row['summ']; if( $tcrow > $summm){ $quer= "UPDATE `test2022`.`t2` SET `summ` = '0' WHERE `t`.`summ` = ". $row['summ']; } else { if( $tcrow < $summm){ $quer= "UPDATE `test2022`.`t2` SET `summ` =' $tcrow' WHERE `t`.`summ` = ". $row['summ']; if( $tcrow < $summm){ break;} } } }
Работает нормально, но еще необходимо сделать чтоб выбирать не весь столбец, а диапазон.
Но тут думаю сделать условие where summ < $tcrow;
Выборка произойдет до суммы не превышающей запрошенную.
Проверил сумму 0.00012
Да получить все строку не проблема, просто думал реализовать как проще. Но похоже проще не получится. )))
выбрать все циклом вообще не сложно.
$result = $mysqli->query('SELECT * FROM `t`'); // запрос на выборку
while($row = $result->fetch_assoc())// получаем все строки в цикле
{ }
Придется построчно обрабатывать, хотел одним запросом у первого и второго запроса будет 0
а третьему придется минусовать и возвращать остаток.
У вас архитектура в БД сомнительная очень. Табличка у вас похоже на лог транзакций, тогда вам ничего не надо ни от куда отнимать, а просто добавить строку с -70.Так же сделать какую то другую табличку от куда будете читать общее значение, и при вставке в лог транзакций обновлять и общее поле.
Если я ошибся, то почему у вас в табличке 3 записи в которые надо внести изменение? Расшарьте задачу подумаем как грамотнее реализовать, пока по вашему описанию вы придумываете костыль. Как минимум непонятно зачем вам три строки, а не одна.
это просто выше я дал пример для понимания.
Просто думал есть какой нибудь запрос получить сразу строки с нужным числом.
SELECT * FROM `t` WHERE `summ` =50 LIMIT 0 , 30 выберет конкретные значения где есть 50
Мне же просто нужно получить именно мою сумму.
Если есть три строки, пусть это будет 3 человека.
Каждый имеет 50 рублей, мне нужно занять 120 рублей, но у одного нет такой суммы, по этому у первого и второго,
забираем в долг все деньги что есть. А у третьего берем не достающие 20, а 30 остается у третьего.
Нифига это не проще, скорее непонятнее
Задача удалить из таблицы 100 монет, после всех операций останется 70 монет в (7, 70);
CREATE TABLE IF NOT EXISTS `t` (
`id` int(25) NOT NULL,
`summa` int(100) NOT NULL,
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Дамп данных таблицы `t`
INSERT INTO `t` (`id`, `summa`) VALUES
(1, 30),
(5, 50),
(6, 10),
(7, 80);
Тот openapi-sandbox.kucoin.com выдает вам ответ 401 Unauthorized
И Invalid KC-API-SIGN - что бы это ни значило.
Т.е. со скриптом все ок, но не ок со взаимодействием с тем сторонним хостом. Уж не знаю что и как там должно быть.
А у меня ошибку не выдает, вернее заголовки не получаю вообще.
А ошибка похоже с подписью в этой строке,
$hmac= base64_encode(hash_hmac('sha256', $nonce."GET/api".$host.$auth, utf8_encode($secret), true));
Уже десятки раз пробовал разные коды, и код с гитхаба, один фиг не удается подключиться.
Первый раз такая фигня с api.
UPD. Браузер сменил, стало нормально.
Я раньше где только не был, от Захоста, джино, ihc, и еще десяток разных.
Сейчас я на firstvds. Из Минусов поддержка платная, но я решал всегда проблемы, платить приходилось за перенос vds на новый, так как раньше самому было долго.
Был на тарифе улет, сайтов было около 200, сейчас осталось 5-6 сайтов, забросил все онлайн, в данный момент.
Сейчас тариф скинул ниже, разгон, без панели.
С панелью выйдет рублей 600 в месяц, первый месяц панель бесплатно.
Возможно у меня трафика на сайтах крохи, по этому ничего не глючит.
Панель ISP лайт, решает все поставленные задачи.
Приглядитесь, может и вам он пойдет, в любом случае выбор за вами.
Только самое главное не берите тарифы с OVZ. Только KVM.
,
Добрый день, подскажите куда сделать пуш домена зона net
надо продлить.
лежит тут evo.ru-tld.ru
danesconames.com