Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/02/2011, 06h54   #1
Membre régulier
 
Homme
Développeur Web
Inscription : septembre 2008
Messages : 253
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : Corée

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : septembre 2008
Messages : 253
Points : 90
Points : 90
Par défaut Stratégie de tri sur deux tables

Bonjour,

J'ai deux tables avec différentes structures, mais qui possède des attributs en commun.

J'aimerai pouvoir les joindre en les triant par date.

Dans mon contrôleur :
Code :
1
2
$this->comments = Doctrine_Core::getTable('Comment')->createQuery('c')->orderBy('created_at DESC')->execute();
$this->reviews = Doctrine_Core::getTable('Reviews')->createQuery('c')->orderBy('created_at DESC')->execute();
J'aimerai afficher les éléments sans distinction d'objet par date, dans une même boucle.

Du genre :
Code :
1
2
3
foreach ($reviews and $comments as $item):
echo $item->getCreatedAt();
endforeach;
Avez vous une bonne stratégie pour cela ?
Fused est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 09h47   #2
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Une bonne boite de paracétamol

Plus sérieux, c'est infaisable au niveau de la base de donnée, sauf si les structure des deux tables ont un segment commun. même nom de champ et même taille pour ce que tu veux traiter ainsi. Il est alors possible de faire une requête (SQL) d'union et d'utiliser cette requête pour faire un tri. A ma connaissance ceci n'est réalisable qu'avec Oracle.

Avec les outils dont tu disposes tu peux aussi utiliser la notion d'héritage dans Doctrine. Créer une table "racine" et la faire hériter vers tes deux tables. Par contre, cela va signifier que tous les champs seront disponibles pour chaque enregistrement quelque soit sa source.

Tu peux aussi créer une table centrale et deux tables de compléments d'informations.

Et, en dernier recours, si c'est uniquement pour un affichage, tu peux faire deux requêtes qui retournerons deux tableaux (array) en utilisant les notions doctrine d'"hydratation". Il faudra que ces deux tableaux soient identique dans leurs structures.

Ensuite tu les joins et tu les tries. Ceci ne marchera que si la quantité de données à traiter reste minime (pas pour des dizaines de milliers d'enregistrement ! )
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 10h39   #3
Membre régulier
 
Homme
Développeur Web
Inscription : septembre 2008
Messages : 253
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : Corée

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : septembre 2008
Messages : 253
Points : 90
Points : 90
J'ai posté ce message quand j'ai justement commencé à en avoir mal à la tête !

J'étais parti sur l'héritage dans un premier temps mais j'y ai plus tard renoncé car cela ne m'arrangeai pas vraiment.

Je vais peut-être opter pour un traitement hors contexte... en javascript !
C'est assez rapide je pense, je ne pense pas avoir plus d'une centaine de résultats réunis.

Merci
Fused est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 11h50   #4
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Sauf à partir sur de l'oracle...

Et une fois les modifications de la structure (héritage ou autre) oubliés.

Il ne te reste que le traitement local où le traitement par tableau en PHP.

Note que, si tu as le besoins de traiter en une fois les données de deux tables, c'est qu'il est probable qu'elle n'auraient dû n'en faire qu'une la majeur partie du temps.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 09h32   #5
Membre régulier
 
Homme
Développeur Web
Inscription : septembre 2008
Messages : 253
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : Corée

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : septembre 2008
Messages : 253
Points : 90
Points : 90
Oui, elles n'auraient du en faire qu'une seule, elles l'ont été pendant un moment, mais trop de traitements différents ont fait trop de complexité.

J'utilise MySQL, j'ai aussi pensé à générer une pseudo vue matérialisée pour rassembler les tables pour les cas où ces objets sont liés, mais niveau performance, c'est pas top !
Fused est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h11.


 
 
 
 
Partenaires

Hébergement Web