Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在SQL中存储多个虚拟货币_Php_Sql - Fatal编程技术网

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并只存储该值。任何类型的交易也将首先转换为青铜。你唯一需要转换成银或金的时候是为了展示。

我会把所有东西都转换成青铜,然后存储那个值。任何类型的交易也将首先转换为青铜。您唯一需要转换为银或金的时间是为了展示。

只需存储同等数量的青铜。然后使用以下算法,尽可能多地将其转换为黄金,将剩余部分转换为白银,其余部分保留为青铜:

  • 将黄金的数量设置为零,白银的数量设置为零,青铜的数量设置为数据库所示的任何数量
  • 设置银数等于青铜数除以10(使用整数除法)。将青铜数量设置为青铜模块10的数量
  • 设置黄金数量等于白银数量除以10(使用整数除法)。设置银数等于10模银数
  • 如果你有9327枚铜牌:

  • 金=0,银=0,铜=9327
  • 金=0,银=932,铜=7
  • 金=93,银=2,铜=7

  • 只需储存同等数量的青铜。然后使用以下算法,尽可能多地将其转换为黄金,将剩余部分转换为白银,其余部分保留为青铜:

  • 将黄金的数量设置为零,白银的数量设置为零,青铜的数量设置为数据库所示的任何数量
  • 设置银数等于青铜数除以10(使用整数除法)。将青铜数量设置为青铜模块10的数量
  • 设置黄金数量等于白银数量除以10(使用整数除法)。设置银数等于10模银数
  • 如果你有9327枚铜牌:

  • 金=0,银=0,铜=9327
  • 金=0,银=932,铜=7
  • 金=93,银=2,铜=7

  • 一种方法是只将所有货币储存在青铜币中

    那样的话,如果你有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()是确保它是整数除法的方法吗?请注意,您的问题的标题有点误导(并且包含拼写错误),因为问题不是关于“真实”货币的。对于真实货币,它们之间的关系会发生波动,因此所需的解决方案会有所不同。请注意,您的问题的标题有点误导(并且包含拼写错误),因为该问题与“真实”货币无关。对于实际货币,它们之间的关系会波动,因此所需的解决方案会有所不同。我相信这只是公认答案的伪代码。假设
    /
    表示整数除法。我相信这只是公认答案的伪代码。假设
    /
    表示整数除法。