2009-12-31 3 views
0

Disons que je voulais construire une application qui va tirer les liens d'URL à partir d'une base de données et afficher 50 sur une page. J'utilise juste des liens comme exemple. Et si je devais stocker plusieurs valeurs, un tableau dans un champ mysql pour chaque lien/enregistrement publié.Quel est le meilleur moyen de stocker et de récupérer un tableau dans PHP/MySQL DB

S'il y a 5 éléments pour chaque lien, je pourrais avoir un tableau de 5 éléments sur la page, une liste de 5 éléments séparés par des virgules, ou je pourrais utiliser json encoder/décoder, ce qui serait mieux pour la performance enregistrer un lien vers la base de données et l'afficher sur la page, quelque chose comme imploser/exploser avec une liste d'éléments, json encoder/décoder, ou sérialiser/dé-sérialiser le tableau?

Répondre

2

La sérialisation est probablement la meilleure si vous ne souhaitez pas utiliser plusieurs tables. La raison étant qu'elle traite des caractères spéciaux. Si vous utilisez une liste séparée par des virgules, vous devrez vous inquiéter des valeurs qui contiennent déjà des virgules. Serialize/unserialize traite déjà de cela. Mais le problème est que la sérialisation n'est pas très rapide, bien que vos tableaux semblent assez simples. Le meilleur est toujours d'avoir plusieurs tables car il vous permet de rechercher et/ou de manipuler les données beaucoup plus facilement à une date ultérieure. Il n'est pas difficile non plus en PHP de créer une boucle pour générer un SQL qui ajoute plusieurs enregistrements à la seconde table (en les rapportant au parent dans la table principale).

BTW, il y a beaucoup d'autres questions similaires à celle-ci sur SO: Optimal Way to Store/Retrieve Array in Table

2

La meilleure façon, puisque vous le demandez, est de créer une table qui décrit les données que vous allez enregistrer, puis insérer une ligne pour chaque élément. Dans votre exemple, cela voudrait dire que vous avez besoin de deux tables; pages et links, où il existe une clé étrangère dans links.page_id faisant référence pages.id.

Questions connexes