Я пытаюсь создать рекламную платформу для биткойн-крана и, следовательно, использую MySQL в качестве базы данных. Есть причина, по которой я упоминаю биткойн в своем вопросе, потому что я считаю, что моя проблема в некоторой степени связана с этим. Биткойн учитывает десятичные знаки до восьмого знака после запятой. Таким образом, платеж, поступающий от кого-либо, может составлять 0,01234567 BTC, чего обычно не бывает для обычной денежной транзакции. Теперь в своем заявлении на SQL я пытаюсь проверить, заплатил ли рекламодатель точную сумму за свое рекламное место, и тем самым обновить заказ, чтобы он был успешным. Ниже приводится заявление, которое я использую …
UPDATE order_table
SET status = 'success'
WHERE orderid = $orderid
AND amount <= $amount
Поле количества было определено как ДВОЙНОЕ. Теперь, когда значение суммы составляет 0,01 BTC, заказ не должен быть успешным, когда сумма в долларах меньше, чем эта. Но когда пользователь платит 0,0099 BTC, он обновляется как успешный !!! Я прочитал следующее решение, но оно имеет дело с FLOAT …
MySQL "лучше чем" условие иногда возвращает строку с равным значением
Интересно, применима ли та же логика и к DOUBLE, и могу ли я слепо преобразовать тип данных DOUBLE в DECIMAL, чтобы избавиться от проблемы?
Редактировать: Спасибо за Лучший тип данных для хранения денежных значений в MySQL ссылка в комментарии. Интересно, смогу ли я использовать биткойн-сатоши для решения проблемы. В этом случае запрос будет следующим …
UPDATE order_table
SET status = 'success'
WHERE orderid = $orderid
AND amount*100000000 <= $amount_in_satoshi
Задача ещё не решена.
Других решений пока нет …