2010-10-25 39 views
2

J'ai deux tables dans la base de données (vidéos et viewData). Je tente de construire un script qui s'exécute pour chaque enregistrement dans la table "videos" et fait quelque chose en utilisant le champ "videoID" pour cette entrée spécifique dans le tableau "videos". La partie fait quelque chose serait le dumping de certaines données dans la table viewData.php faire quelque chose pour chaque enregistrement dans la base de données

Aurais-je besoin de stocker tous les enregistrements dans un tableau avant d'appeler la boucle? Un exemple d'une boucle comme celle-ci serait vraiment utile. Également d'une manière qui pourrait être potentiellement évolutive et qui ne nuirait pas trop au serveur s'il y avait plus de 1000 enregistrements dans la table "videos".

Merci, Dave

+0

Pouvez-vous être plus précis sur ce que vous essayez d'accomplir? Cela ressemble à ce qui peut être fait avec SQL et/ou une procédure stockée, pourquoi impliquer PHP? –

Répondre

1

Essayez d'éviter la boucle à tout prix. Réfléchissez au traitement basé sur un ensemble, ce qui signifie que vous manipulez l'ensemble des lignes au sein d'une commande SQL.

Je ne suis pas entièrement sûr de ce que vous essayez de faire, car votre question est un peu vague. Cependant, voici deux façons possibles de gérer ce que vous essayez de faire en utilisant la pensée basée sur des ensembles.

Vous pouvez faire un JOIN dans un UPDATE, en sélectionnant essentiellement à partir de la table parente et UPDATE la table enfant pour toutes les lignes dans une seule commande UPDATE.

UPDATE c 
    SET Col1=p.Col1 
    FROM ParentTable   p 
     INNER JOIN ChildTable c On p.ParentID=c.ParentID 
    WHERE ... 

vous pouvez également insérer la base d'un SELECT, donc vous devez créer une ligne de chaque ligne retournée dans le SELECT, comme:

INSERT INTO ChildTable 
     (Col1, Col2, Col3, Col4) 
    SELECT 
     p.ColA, p.ColB, 'constant value', p.ColC-p.ColD 
     FROM ParentTable p 
     WHERE... 
0

Travailler avec la base de données dans la boucle isn.t une bonne pratique. Iy est bon de sélectionner toutes les données de tableau dans un tableau par une requête et de travailler avec ce tableau à l'avenir.

0

Avez-vous accès par d'autres moyens à MyQSL tables? Comme avec MySQL Administrator ou un autre outil, même en ligne de commande? Ceci car il y aurait beaucoup plus de temps, de ressources et d'autre chose, en économisant cela directement dans la base de données, à travers une requête ou une fonction de base de données.

Je le ferais de cette façon. Par souci de clarté, sauf si vous stockez les vidéos elles-mêmes dans les tables de base de données, 1000 enregistrements ne sont pas un problème. Peut-être 10.000 serait.

Conseil général: ne faites que ce que vous devez faire.

Si vous avez simplement besoin d'opérer sur des données, faites-le sur la base de données. Si vous devez simplement cocher un champ dans une table, CHOISISSEZ votre champ FROM votre_table, au lieu de SELECT * FROM your_table.