2012-05-14 33 views
0

我正在编写一个系统,记录用户在游戏中的成就,通过收集上传到系统的Trophy数据,它使它工作正常我已经开始考虑系统的一部分,我可以用两种不同的方式来做哪个更有效PHP中,从嵌套开关案例数据库爆炸()

这个系统的这个部分收集了奖杯的等级(青铜,银,金,水晶,翡翠)以及它的价值数量用户作为游戏表中的记录,除了表主键和user_id外键以外的每个字段代表可以按照它们列出的确切顺序获得的每个奖杯,这意味着它们不以机器的任何方式排序可以很容易地搜索到

我是如何进行战斗的,这是有另一个表,其中每个记录包含游戏和一个字符串,列出由|分隔的奖杯的等级顺序,所以当我使用爆炸(STRING,“|”)我得到阵列和该阵列的每个索引是一个字符,它可以看起来像这样

C | C | S |克| C | G | S |百灵

这仅仅是奖杯秩,点值是通过函数来​​完成的,我通过游戏ID和奖杯ID并且开关case语句将首先检查我通过了哪个游戏,而在每种情况下嵌套开关的情况下都会检查id,在每种情况下它们返回点值奖杯

当然,我没有计划出我的代码,上面的排名字符串原本没有|而且我并没有像那个排名那样做出这样的积分值,这个积分值非常介于1到3个数字之间,现在我知道我可以按照排名顺序做点积分值

我想知道哪种方法更有效的Web服务器和浏览器,从数据库中拉取字符串并使用爆炸(STRING,“|”)(和intval()将字符串中的点值转换为整数,需要它们像计算)或调用一个功能switch case case语句像查找表,或者如果我已经有足够的效率

我真的没有真正有兴趣试图做我在做什么以完全不同的方式只是为了使它更有效率,因为这些方法完全符合我使用它们的嵌套循环在

+1

这是非常抽象的,你可以通过添加表结构和可能的一些相关的当前查询来改善帖子。 –

+1

这个问题并不是真的处于可以正确回答的状态。没有示例数据和代码,很难给出明确的答复。不过,我会这样说。不要将序列化的数据放入数据库!这样做违反了第一范式,即表示数据库中的一列应该只保存一个数据。通过序列化,你基本上可以将多个数据填充到列中,这会让你的生活过得更糟。 – GordonM

回答

0

尝试重建你的分贝,可能会有一个表与许多关系的用户,战利品表..列用户ID,奖杯ID,总分和/或其他数据与视图,你可以得到用户名,奖杯类型和积分

0

我想更好地使用serialize PHP function

public function setValues($values) { 
    if (is_array($values)) { 
     $this->setFieldValue('values', serialize($values)); // for db field 
    } elseif (is_string($values)) { 
     $this->setFieldValue('values', serialize(explode(",", $values))); // for db field 
    } else { 
     throw new Exception("Invalid values data format"); 
    } 
} 

public function getValues() { 
    $values = $this->getFieldValue('values'); // or something else getting field data from DB 
    if ($values == "") { 
     return array(); 
    } else { 
     return unserialize($values); 
    } 
} 

在这个CAE你有店面快速而简单的方法和恢复数据。