IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Stratégie de tri sur deux tables


Sujet :

Symfony PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2008
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Corée

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2008
    Messages : 253
    Points : 122
    Points
    122
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ($reviews and $comments as $item):
    echo $item->getCreatedAt();
    endforeach;
    Avez vous une bonne stratégie pour cela ?

  2. #2
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    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 !

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2008
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Corée

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2008
    Messages : 253
    Points : 122
    Points
    122
    Par défaut
    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

  4. #4
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    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 !

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2008
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Corée

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2008
    Messages : 253
    Points : 122
    Points
    122
    Par défaut
    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 !

Discussions similaires

  1. Tri sur deux tables
    Par Jefty dans le forum Langage SQL
    Réponses: 4
    Dernier message: 29/03/2013, 11h57
  2. Sélection et tri sur deux tables
    Par comode dans le forum Langage SQL
    Réponses: 6
    Dernier message: 19/10/2012, 19h23
  3. Requete sur deux tables avec tri
    Par ebaoo dans le forum MySQL
    Réponses: 2
    Dernier message: 25/02/2010, 18h41
  4. Tri sur deux tables
    Par GriffinK dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/01/2010, 13h51
  5. 2 Count() sur deux tables en jointures gauches
    Par Alexandre T dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/09/2003, 16h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo