Php 如何在SQL中存储多个虚拟货币
我有一个名为Php 如何在SQL中存储多个虚拟货币,php,sql,Php,Sql,我有一个名为users的表,该表当前包含整数类型的列money,该列包含用户当前拥有的金额 然而,我希望扩大业务,并拥有更多基于彼此的货币。1金=10银=100铜(或类似的东西)。当你得到100枚铜牌时,它们将转换成1枚金币。与10铜=1银相同所有这些货币在我的表中都有自己的列。我有一个钩子函数,可以在每次请求时调用该函数,并在可能的情况下更新货币 有人告诉我,尽管我可以使用一列货币,然后我可以使用变量并取出不同的货币 但我的问题是:最好的方法是什么? 如果后一种方法是最好的:如何将变量放入一个
users
的表,该表当前包含整数类型的列money
,该列包含用户当前拥有的金额
然而,我希望扩大业务,并拥有更多基于彼此的货币。1金=10银=100铜(或类似的东西)。当你得到100枚铜牌时,它们将转换成1枚金币。与10铜=1银相同所有这些货币在我的表中都有自己的列。我有一个钩子函数,可以在每次请求时调用该函数,并在可能的情况下更新货币
有人告诉我,尽管我可以使用一列货币
,然后我可以使用变量并取出不同的货币
但我的问题是:最好的方法是什么?
如果后一种方法是最好的:如何将变量放入一个已经存在的对象(一个包含用户数据的对象;我认为它被称为
stdClass
或类似的东西)$user->username
等等?我以前也做过类似的事情,我同意您应该只在“money”列中添加一个,然后根据需要计算其他货币。如果您有单独的列,则必须依靠触发器或应用程序逻辑来保持它们的同步。我以前也做过类似的事情,我同意您应该只使用“货币”的一列,并根据需要计算其他货币。如果有单独的列,则必须依靠触发器或应用程序逻辑来保持它们的同步。我会将所有内容转换为bronze并只存储该值。任何类型的交易也将首先转换为青铜。你唯一需要转换成银或金的时候是为了展示。我会把所有东西都转换成青铜,然后存储那个值。任何类型的交易也将首先转换为青铜。您唯一需要转换为银或金的时间是为了展示。只需存储同等数量的青铜。然后使用以下算法,尽可能多地将其转换为黄金,将剩余部分转换为白银,其余部分保留为青铜:
只需储存同等数量的青铜。然后使用以下算法,尽可能多地将其转换为黄金,将剩余部分转换为白银,其余部分保留为青铜:
一种方法是只将所有货币储存在青铜币中 那样的话,如果你有123枚青铜币,你就可以转换它们
123 / 100 //Gold with integer division which should be 1
剩下的是123-NumGold*100
ie23
你有吗
23 / 10 // Silver with integer division should be 2
剩下的是23-NumSilver*10
ie3铜币
这是SQL只知道铜币,并将其显示为金,银都在应用层中一种方法是只将所有货币存储在铜币中 那样的话,如果你有123枚青铜币,你就可以转换它们
123 / 100 //Gold with integer division which should be 1
剩下的是123-NumGold*100
ie23
你有吗
23 / 10 // Silver with integer division should be 2
剩下的是23-NumSilver*10
ie3铜币
这是SQL只知道铜币,并将其显示为黄金,白银全部在应用程序层中接受的答案不能解释超过9999的值,因为它会增加10个白银,并给出错误的输出 最好的解决方案是:
var bronze, silver, gold;
var myMoney = 32141; // number from database
bronze = myMoney % 10;
myMoney = (myMoney - bronze) / 10;
silver = myMoney % 10;
gold = (myMoney - silver) / 10;
输出:
gold = 321
silver = 4
bronze = 1
接受的答案不能解释超过9999的值,因为它会增加10个银币,并给出错误的输出 最好的解决方案是:
var bronze, silver, gold;
var myMoney = 32141; // number from database
bronze = myMoney % 10;
myMoney = (myMoney - bronze) / 10;
silver = myMoney % 10;
gold = (myMoney - silver) / 10;
输出:
gold = 321
silver = 4
bronze = 1
intval()是确保它是整数除法的方法吗?intval()是确保它是整数除法的方法吗?请注意,您的问题的标题有点误导(并且包含拼写错误),因为问题不是关于“真实”货币的。对于真实货币,它们之间的关系会发生波动,因此所需的解决方案会有所不同。请注意,您的问题的标题有点误导(并且包含拼写错误),因为该问题与“真实”货币无关。对于实际货币,它们之间的关系会波动,因此所需的解决方案会有所不同。我相信这只是公认答案的伪代码。假设
/
表示整数除法。我相信这只是公认答案的伪代码。假设/
表示整数除法。