2011-02-13 5 views
0
de PHP tableau

J'ai une application qui créent des applications de cadeaux de l'enfant, et chaque propriétaire de l'application peut ajouter vos propres cadeaux, en ce moment je suis stocker des cadeaux dans un tableau php:table MySQL VS

<?php 
$gifts_array = array(
array(>4,"Flower",>250,"5_250.jpg",301), 
array(1,"a Good Day",30,"3_30.jpg",153), 
array(2,"cat",10,"3_10.gif",139), 
array(3,"batman",20,"2_20.jpg",101), 
array(11,"White Wolf",100,"11_100.jpg",5), 
array(10,"crazy cat",30,"10_30.gif",2), 
array(8,"Gift",100,"6_100.jpg",2), 
array(12,"Car",120,"12_120.jpg",1), 
array(9,"cat 2",30,"9_30.gif",1), 
array(7,"2Pac",500,"3_500.jpg",0), 
array(6,"Outlawz",500,"4_500.jpg",0) 
); 
?> 

Je dois mettre à jour compteur de cadeaux à chaque fois envoyé, donc je dois faire une boucle pour trouver le cadeau puis incrémenter et écrire l'ensemble du tableau dans le fichier.

Il est bon de créer ce tableau comme ça:

'100'=>array('gname'=>"Flower",'gpoints'=>250,'gpic'=>"5_250.jpg",'gviews'=>301), 
    100 is the Gift ID. 

Quelle est la meilleure solution: - Créer pour chaque application d'une table MySQL? - Utiliser un tableau pour toutes les applications? - Utiliser une table MySQL pour stocker tous les cadeaux des applications et mettre en cache les résultats MySQL pour chaque application après Gift INSERT/UPDATE/DELETE?

+0

Une table par application n'est pas une mauvaise idée. J'ai une application qui utilise quelques centaines de tables ... – GolezTrol

+0

Je l'ai déjà utilisé pour stocker des utilisateurs, et certains journaux, en utilisant le cache pour cette solution est bon ??? – Hamza

+0

MySQL a un cache de requête intégré. –

Répondre

3

Créez simplement une table avec le même nombre de colonnes, plus une qui identifie quelle "application" elle correspond. Ne créez pas une nouvelle table identique pour chaque application, et ne gardez pas la lecture/écriture d'un fichier texte, les deux sont des cauchemars de concurrence et de maintenance.

+0

chaque application peut télécharger un maximum de 100 cadeaux, je pense que les requêtes de SELECT à partir d'une table de plus de 300k lignes est lente? – Hamza

+1

Non, sauf si vous considérez que les millisecondes à un chiffre sont lentes. Cette page Web implique de nombreuses requêtes à des tables avec des millions de lignes, est-ce lent? Définissez un index sur la colonne 'application' et il ne regarde même pas la table, juste l'index. –

+1

Si vous utilisez le moteur de stockage MyISAM, le stockage de toutes vos applications dans une table entraînera des problèmes de simultanéité. InnoDB ne souffrira pas aussi mal. EDIT: Cependant, même en utilisant le moteur de stockage MyISAM est mieux que l'approche du fichier texte – JamesHalsall

0

Utilisez une seule table

//Create a table to hold all your info 
CREATE applications (id INTEGER AUTO INCREMENT, gname VARCHAR(255), gpoints INTEGER, gpic VARCHAR(255), gviews INTEGER); 

//Increment the number of views 
UPDATE applications SET gviews=gviews+1 WHERE gname='Flower' 

//Get the names of all the applications (replace gname with what you want to get or * for all) 
SELECT gname FROM applications 

//Initially add the entries into applications 
INSERT INTO applications (gname, gpoints, gpic, gviews) VALUES ('Flower', 250, '5_250.jpg', 301) 
+0

Chaque application a un ID stocké dans la table Applications, et chaque application peut télécharger ses propres cadeaux :) – Hamza