2010-02-04 7 views
4

J'ai un tableau d'objets php que je veux stocker dans une table de base de données mysql. La seule façon dont je peux penser est d'avoir une table pour représenter l'objet avec un identifiant unique et une table séparée pour stocker le tableau (il pourrait y avoir une colonne array_id et un object_id) mais la récupération nécessiterait une jointure coûteux. Y a-t-il un meilleur moyen? Je me fous de l'espace de stockage ou du temps d'insertion autant que du temps de récupération.Le moyen le plus rapide de représenter le tableau dans mysql pour la récupération

Je n'ai pas nécessairement besoin que cela fonctionne pour les réseaux associatifs, mais si la solution le pouvait, cela serait préférable.

+0

De quels champs des objets avez-vous besoin pour stocker? – outis

Répondre

2

Construire une structure arborescente (lire Array) dans mysql peut être difficile mais cela se fait tout le temps. Presque n'importe quel forum avec des threads imbriqués a un mécanisme pour stocker une structure arborescente. Comme une autre affiche a dit qu'ils ne doivent pas être coûteux.

La vraie question est de savoir comment vous voulez utiliser les données. Si vous devez être en mesure d'ajouter/supprimer des champs de données à partir des nœuds individuels dans l'arborescence, vous pouvez utiliser l'un des deux modèles

1) contiguïté Liste modèle

2) Modifié Précommande Arbre Traversal algorithme

(Ils ont l'air effrayant, mais ce n'est pas si mauvais que je promets.)

Le premier listé est probablement le plus commun que vous rencontrerez et le second est celui que j'ai commencé à utiliser plus fréquemment et a de bons avantages une fois que vous Envelopper votre tête autour d'elle. Jetez un oeil à cette page - il a un excellent rapport sur les deux. Comme le dit une autre affiche, si vous n'avez pas besoin de changer les données avec des requêtes ou de chercher dans le texte, utilisez une fonction PHP pour le stocker dans un seul champ.

$array = array('something'=>'fun', 'nothing'=>'to do') 

$storage_array = serialize($array); 

//INSERT INTO DB 

//DRAW OUT OF DB 

$array = unserialize($row['stored_array']); 

Presto-changement, celui-là est facile.

0

Si vous ne parvenez pas à effectuer une recherche SQL dans les données du tableau, vous pouvez ajouter une seule colonne à la table et sérialiser le tableau. Vous auriez à le désérialiser sur la rétention.

Vous pouvez utiliser serializeation JSON/PHP ou tout ce qui est plus approprié pour la langue que vous développez dans

0

Jointures ne pas être si cher -. Vous pouvez définir un index.

Questions connexes