Bonjour,
Voici la situation dans laquelle je suis, l'état de mon raisonnement et mes questions ...
J'aimerai considérer chacune de mes tables comme étant des objets et donc, pour chacune de mes tables, créer une classe contenant une fonction pour le SELECT, une fonction pour le INSERT, etc.
Bien entendu, mes tables sont relationnelles. Exemple :
TABLE langue est composée des champs :
- id
- code
- langue
- statut
TABLE statut est composée des champs :
- id
- statut
Comme vous l'aurez comprit, le champ statut dans langue contient un ID renvoyant vers l'id de la table statut. Je n'ai par contre pas envie de trop lier mes 2 tables dans une seule et même classe.
Ma réflexion était donc la suivante :
- je crée une classe LANGUE avec une fonction SELECT qui fait (en gros) un SELECT * FROM langue et qui stocke le tout dans un array ;
- je crée une classe STATUT avec une fonction SELECT qui fait (en gros) un SELECT * FROM statut et qui stocke également le tout dans un array ;
- je crée une troisième classe avec une fonction qui effectuerai un "croisement" entre ces 2 tableaux pour permettre de générer un nouveau tableau qui donnerait comme résultat l'équivalent d'une requête comme celle-ci :
et qui retournerait donc quelque chose comme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT langue.id AS id, langue.code AS code, langue.langue AS langue, statut.statut AS statut FROM langue, statut WHERE langue.statut = statut.langue
1 FR Français OK
2 EN Anglais NOK
3 NL Néerlandais OK
...
Mes questions :
1. est-ce que ma réflexion "orientée objet" vous semble cohérente ou est-il tout simplement préférable de faire, dans ma fonction SELECT de ma classe LANGUE, la query complète ?
2. si ma réflexion est correcte, est-il possible de générer ce "croisement" de requête ?
3. en travaillant de la sorte (en gros, faire une query globale et faire un tri ou un filtre éventuel sur les résultats par la suite) ; n'est-ce pas un risque de ralentir le site puisqu'on ne fait aucun filtre dans la requête SQL elle-même ?
4. avez-vous une meilleure idée :-) ?
Merci d'avance,
Olivier
Partager