seosniks

seosniks
Рейтинг
389
Регистрация
13.08.2007
ca7cba
LEOnidUKG #:

Главное в самом запросе 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.  Последний  отнимает не достающую сумму а остаток возвращает в базу.

Ilya74 #:

У вас структура БД для такой задачи ужасная. Никто так не делает. Делайте как вам выше советовали одну таблицу с балансом пользователей, а другую таблицу с транзакциями. В первую записываете итоговый баланс пользователя после манипуляций, а во вторую прибавления и вычитания по пользователю. Сами транзакции делаете на PHP, либо через процедуры и функции MySQL (но так в разы сложнее).

У меня в базе много таблиц,  просто у меня бот в этой таблице  должен забирать  произвольные суммы и перемещать в историю сделок. а эти 

данные убирать из базы совсем.  

Можно даже сразу удалять     в место UPDATE    если  `summ` ='0

Просто думал сделать как то проще.

А проще не получается.

jpg 2022-01-26_133230.jpg
jpg 2022-01-26_133255.jpg
LEOnidUKG #:

Главное в самом запросе UPDATE миносовать данные, а не тупо делать UPDATE на новые, иначе если в этот момент у кого-то будет пополнение то оно слетит из-за вашей обработке. В масштабных проектах так не делается. Это беда.

Делаются транзакции и лог всех действий (+/-), и уже потом по ним баланс подбивается. 



Это делает для  личного использования, а таблица взята из сети для примера.

В таблице лежит сумма, в каждой строке сумма разная.

Задача  набрать сумму и удалить пустые строки в таблице.




Решил с помощью PHP задачу.

Хотя насколько  оно  правильно не знаю.

Делается запрос в базу, выбирается   в цикле весь столбец   (id   и   summ )   , к сожалению как выбрать  именно нужное количество строк я не знаю.

Дальше в цикле проверяю  нужную сумму в каждой строке.  пример ниже

id   autoincrement      summ ячейка  данных      

Необходимо 120

(id 1 summ= 1) от 120-1=119 UPDATE `test2022`.`t2` SET `summ` = '0' WHERE `t`.`summ` = 1

(id 2 summ= 3) от 119-3=116 UPDATE `test2022`.`t2` SET `summ` = '0' WHERE `t`.`summ` = 3

(id 3 summ= 5) от 116-5=111 UPDATE `test2022`.`t2` SET `summ` = '0' WHERE `t`.`summ` = 5

(id 4 summ= 7) от 111-7=104 UPDATE `test2022`.`t2` SET `summ` = '0' WHERE `t`.`summ` = 7

(id 5 summ= 10) от 104-10=94 UPDATE `test2022`.`t2` SET `summ` = '0' WHERE `t`.`summ` = 10

(id 6 summ= 15) от 94-15=79 UPDATE `test2022`.`t2` SET `summ` = '0' WHERE `t`.`summ` = 15

(id 7 summ= 20) от 79-20=59 UPDATE `test2022`.`t2` SET `summ` = '0' WHERE `t`.`summ` = 20

(id 8 summ= 30) от 59-30=29 UPDATE `test2022`.`t2` SET `summ` = '0' WHERE `t`.`summ` = 30


Не хватает 29 монет, берем их в id = 9 

(id 9 summ= 50) от 29-50=21 UPDATE `test2022`.`t2` SET `summ` =' 21' WHERE `t`.`summ` = 50


Предложено по запросу=141




$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


Необходимо 0.00012


Не хватает 0.00012 монет, берем их в id = 1

(id 1 summ= 1) от 0.00012-1=0.99988 UPDATE `test2022`.`t2` SET `summ` =' 0.99988' WHERE `t`.`summ` = 1


Предложено по запросу=1



Ilya74 #:
Берёте любой язык программирования, делаете запрос к БД и получаете все строки, далее в цикле проходите каждую строку и вычитаете сколько нужно. Смысла городить сложные запросы и процедуры на MySQL нет.

Да получить все строку не проблема, просто  думал реализовать как проще.  Но похоже проще не получится. )))


выбрать все циклом   вообще не сложно.  

$result = $mysqli->query('SELECT * FROM `t`'); // запрос на выборку

while($row = $result->fetch_assoc())// получаем все строки в цикле  

{ }

Придется построчно обрабатывать,   хотел одним запросом   у первого    и второго запроса  будет 0

а третьему придется минусовать и возвращать остаток.

Aisamiery #:

У вас архитектура в БД сомнительная очень. Табличка у вас похоже на лог транзакций, тогда вам ничего не надо ни от куда отнимать, а просто добавить строку с -70.
Так же сделать какую то другую табличку от куда будете читать общее значение, и при вставке в лог транзакций обновлять и общее поле.

Если я ошибся, то почему у вас в табличке 3 записи в которые надо внести изменение? Расшарьте задачу подумаем как грамотнее реализовать, пока по вашему описанию вы придумываете костыль. Как минимум непонятно зачем вам три строки, а не одна.

это просто выше  я  дал  пример для понимания.

Просто думал есть   какой  нибудь запрос получить сразу    строки с нужным числом.

SELECT *  FROM `t`   WHERE `summ` =50    LIMIT 0 , 30    выберет  конкретные  значения где есть   50

Мне же просто нужно получить  именно  мою сумму.

Если  есть три строки, пусть это будет  3 человека.

Каждый имеет   50 рублей, мне нужно  занять  120 рублей, но  у одного нет такой суммы, по этому  у первого  и второго,

забираем в долг все деньги что есть. А у третьего берем  не достающие 20,  а 30  остается у третьего.

webinfo #:

Нифига это не проще, скорее непонятнее

Задача удалить    из таблицы   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

Всего: 4088