2010-10-04 7 views
1

Ceci est une question « méta » que je demande dans un effort pour mieux comprendre quelques noix difficiles que j'ai eu à se fissurer ces derniers temps. Même si vous n'obtenez pas précisément ce que je cherche ici ou là, il y a trop de texte à lire, toute contribution pratique est appréciée et probablement utile.Comment gérer Consommant Beaucoup de données provenant de sources multiples dans un site Web

Supposons que vous avez un site Web qui a besoin d'utiliser les données qui sont stockées dans plusieurs tables d'une base de données. Ces données devront être itérées de multiples façons, utilisées pour les calculs à divers endroits, etc.

Donc sur une page qui doit afficher une collection de projets (d'une table db) contenant chacun une collection des catégories (d'une autre table db) qui contiennent chacune un ou plusieurs éléments (d'une autre table db) Quelle est la meilleure façon de rassembler les données, de les organiser et de les parcourir pour les afficher?

Étant donné que chaque projet peut avoir 1 ou plusieurs catégories et chaque catégorie peut avoir un ou plusieurs éléments (mais les articles sont uniques à une catégorie spécifique) quelle est la meilleure façon d'organiser la pile résultante? Mon but dans l'exemple ci-dessous est de générer une table de projets où chaque projet a les catégories associées et chaque catégorie contient les éléments associés, mais j'ai également besoin d'agréger les données de la table des éléments pour afficher à côté du nom du projet

A Project Name (43 items and 2 of them have errors!) 
- category 1 
    - item 1 
    - item 2 
- category 2 
    - item 1 

Another Project Name (12 items and no errors) 
- category 1 
    - item 1 
- category 2 
    - item 1 

ce que je ne devais récupérer les données de chaque table et le coller dans une variable. Donner moi quelque chose comme:

var $projects = array("id" => 1, "proj_id" => 1, "name" => "aname"); 
var $categories = array("id" => 1, "cat_id" => 1234, "proj_id" => 1, "cat_name" => "acatname"); 
var $items = array("id" => 1, "item_id" => 1234, "location" => "katmandu"); 

Puis je suis passé par les variables foreach imbriquées() boucles construction des lignes I nécessaire pour afficher.

j'ai rencontré des difficultés avec ce que la boucle foreach() fonctionnerait très bien lors de la construction quelque chose de 2 niveaux de profondeur (associant les catégories avec des projets), mais cela n'a pas fonctionné comme prévu lorsque allé trois niveaux de profondeur (COMMENCEMENT .. hah , n'a pas pu résister) et essayé d'ajouter les éléments à chaque catégorie (au lieu d'ajouter tous à un élément ... premier ou dernier je ne me souviens pas lequel). En outre, lorsque quelque chose était présent dans le troisième niveau du tableau, comment additionneriez-vous ces données et récupérez-les pour les sauvegarder au niveau supérieur du tableau en cours de construction? Je suppose que j'aurais pu construire une requête méga SQL qui a tout fait pour moi et tout mettre dans un seul tableau, me sauvant la confusion de la boucle en l'aplatissant, mais ... eh bien, voilà pourquoi je suis ici vous demandant à tous.

Donc, je suppose que le coeur de cette question est: Comment gérez-vous obtenir beaucoup de données de différentes tables, puis en combinant tout pour l'affichage et l'utilisation dans les calculs?

Répondre

0

est Hadoop le genre de chose que vous cherchez?

+0

Non, je pense que Hadoop est plus que ce dont j'ai besoin. – Lothar

1

On dirait que vous allez vouloir utiliser SQL JOIN. Pensez à vous en eux:

http://www.w3schools.com/sql/sql_join_left.asp

Ils extraient les données de plusieurs tables et agrègent. Il ne produira pas ce que vous cherchez, mais il produira quelque chose que vous pouvez utiliser d'une manière différente.

+0

Eh bien, cela contourne le problème.Bien que j'espérais vraiment des informations sur la façon de manipuler les tableaux dans des manières un peu complexes. – Lothar

+0

Le serveur de base de données sera toujours plus efficace pour traiter les données que tout ce que vous pouvez faire en PHP. Une autre solution (médiocre) consiste à vérifier quelque chose comme Gearman. – mattbasta

Questions connexes