2012-05-14 3 views
0

Je programme un système qui enregistre les réalisations des utilisateurs dans les jeux en collectant des données Trophy qui sont téléchargées J'ai commencé à penser à une partie du système que je peux faire de 2 manières différentesCe qui est plus efficace en PHP, explode() à partir d'une base de données de

cette partie du système recueille le rang d'un trophée (Bronze, Argent, Or, Cristal, Jade) et combien de points cela vaut, chacun utilisateur en tant qu'enregistrement dans la table d'un jeu, chaque champ à part la clé primaire des tables et la clé étrangère user_id représente chaque trophée qui peut être obtenu dans l'ordre exact où ils sont listés, cela signifie qu'ils ne sont pas triés peut facilement rechercher si

comment j'ai le combat ceci est qu'il y a une autre table dont chaque enregistrement contient le jeu et une chaîne qui énumère l'ordre des trophées séparés par des | alors sors que j'utilise exploser (STRING, "|") je reçois un tableau et chaque indice du tableau est un seul caractère, il peut ressembler à ceci

b | b | s | g | c | g | s | j

qui est juste au rang de trophée, le point la valeur est faite bien que la fonction où je passe l'id de jeu et l'identification de trophée et une déclaration de cas de commutateur vérifie d'abord quel jeu j'ai passé tandis que les cas de commutateur imbriqués vérifient l'ID, dans chacun de ces cas ils renvoient la valeur de point un trophée

naturellement je n'ai pas prévu mon code, la chaîne de rang ci-dessus à l'origine n'a pas le | et je n'ai pas fait les valeurs de point comme ça, contrairement au rang, une valeur de van très comprise entre 1 et 3 chiffres, maintenant je sais que je peux faire la même chose avec la valeur de point que je l'ai fait avec l'ordre des rangs

Je veux savoir quelle méthode est la plus efficace pour le serveur Web et pour les navigateurs, en extrayant une chaîne d'une base de données et en utilisant explode (STRING, "|") (et intval() pour convertir les valeurs de points en entiers, en ont besoin comme cela pour les calculs) ou en appelant une fonction avec une instruction de changement de cas comme une table de recherche ou si ce que j'ai déjà est assez efficace

Je ne suis pas vraiment intéressé à faire ce que je fais d'une manière complètement différente juste pour le rendre encore plus efficace car ces méthodes correspondent parfaitement aux boucles imbriquées dans lesquelles je les utilise dans

+1

Ceci est très abstrait, vous pouvez améliorer la publication en ajoutant les structures de la table et peut-être certaines de vos requêtes actuelles qui sont pertinentes. –

+1

Cette question n'est pas vraiment dans un état où il peut être correctement répondu. Sans exemple de données et de code, il est très difficile de donner une réponse éclairée. Je dirai ceci cependant. Ne mettez pas de données sérialisées dans une base de données! Cela viole la première forme normale, qui stipule qu'une colonne dans une base de données doit contenir une et une seule donnée. En sérialisant, vous bourrez plusieurs éléments de données dans la colonne, ce qui vous rendra la vie plus tard. – GordonM

Répondre

0

essayer reconstruire votre DB, il pourrait y avoir un tableau réalisations avec un many2many relations aux utilisateurs, trophy tables.Columns ID utilisateur, un ID trophée, total des points et/ou d'autres données avec une vue que vous pouvez obtenir le nom d'utilisateur, type de trophée, et les points

0

Je pense mieux utiliser 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); 
    } 
} 

Dans ce que vous avez cae méthode rapide et facile pour stocker et restaurer des données.

Questions connexes