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

Langage PHP Discussion :

Tri de deux tableaux combinés


Sujet :

Langage PHP

  1. #1
    Membre confirmé Avatar de Devether
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 66
    Par défaut Tri de deux tableaux combinés
    Bonjour,

    J'ai deux tableaux qui contiennent le mêmes genre de données mais tirées de bdd différentes.

    Les données concernent des dossiers clients avec le numéro, les dates de création et de dernière mise à jour ainsi que les noms du créateur et du client.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    array(
      [0] => array(
        ['NUMBER'] => 0000513
        ['NAME'] => 'MARTIN, PAUL'
        ['OPEN_TIME'] => '24/04/2011 11:48'
        ['UPDATE_TIME'] => '26/04/2011 15:58'
        ['OWNER_NAME'] => 'devether'
      )
      [1] => array(
        ['NUMBER'] => 0000515
        ['NAME'] => 'ALLON, JEROME'
        ['OPEN_TIME'] => '24/04/2011 12:22'
        ['UPDATE_TIME'] => '26/04/2011 15:57'
        ['OWNER_NAME'] => 'devether'
      )
      [2] => array(
        ['NUMBER'] => 0000519
        ['NAME'] => 'ANDRE, MICHEL'
        ['OPEN_TIME'] => '24/04/2011 15:08'
        ['UPDATE_TIME'] => '26/04/2011 16:06'
        ['OWNER_NAME'] => 'devether'
      )
    )
    L'utilisateur peut trier les données par chacun de ces champs que je traduit par un "ORDER BY" dans mes 2 requêtes.

    Mon problème c'est qu'une fois les deux tableaux combinés via array_merge, le tri n'est plus bon car ils se mettent l'un derrière l'autre.

    Je voudrais savoir s'il y a une autre manière qu'avec array_merge pour faire ça ou s'il faut re-trier le tableau combiné.

    J'ai tenté cette dernière méthode mais je pars un peu n'importe comment donc...merci de votre aide.

    Devether.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Par défaut
    C'est tableau sont crées directement depuis les requetes? car sinon plutôt que de créer directement deux tableaux puis de les merger autant en creer un seul directement..

  3. #3
    Membre confirmé Avatar de Devether
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 66
    Par défaut
    Les deux tableaux sont créés depuis deux bases différentes. Comment tu fais pour faire un seul tableau ??

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Par défaut
    montre moi ton code de création du tableau

  5. #5
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Si les deux bases sont sur le même serveur tu peux faire une jointure entre les deux tables sans soucis.

    Exemple :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT ....
    FROM bdd1.table1 INNER JOIN bdd2.table2 ON ....

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Par défaut
    ici ça serait plutot un union qu'il faudrait je pense :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (SELECT NUMBER,NAME,OPEN_TIME,UPDATE_TIME,OWNER_NAME FROM nombdd2.nom_de_table )
    UNION
    (SELECT NUMBER,NAME,OPEN_TIME,UPDATE_TIME,OWNER_NAME FROM nombdd1.nom_de_table )
    ORDER BY NAME;

  7. #7
    Membre confirmé Avatar de Devether
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 66
    Par défaut
    Citation Envoyé par transgohan Voir le message
    Si les deux bases sont sur le même serveur tu peux faire une jointure entre les deux tables sans soucis.
    Et non! les deux bases Oracle sont sur deux serveurs différents.

    Citation Envoyé par boo64 Voir le message
    montre moi ton code de création du tableau
    J'utilise la librairie ADOdb pour mes connexions.

    Pour simplifier ça fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     
    $sortBy = ( isset($_GET['sortby']) && !empty($_GET['sortby']) ) ? $_GET['sortby'] 	: 'UPDATE_TIME';
    $sort 	= ( isset($_GET['sort']) && !empty($_GET['sort']) ) 	? $_GET['sort'] 	: 'DESC';
     
    $db1= NewADOConnection(PHPTYPE1);
    $db2= NewADOConnection(PHPTYPE2);
     
    $db1->Connect(SERVICE1, USERNAME1, PASSWORD1);
    $db2->Connect(SERVICE2, USERNAME2, PASSWORD2);
     
    $sql1 = "SELECT NUMBER, NAME, OPEN_TIME, UPDATE_TIME, OWNER_NAME FROM TABLE_DB1 ORDER BY $sortBy $sort";
    $sql2 = "SELECT NUMBER, NAME, OPEN_TIME, UPDATE_TIME, OWNER_NAME FROM TABLE_DB2 ORDER BY $sortBy $sort";
     
    $rowSet1 = $db1->Execute($sql1);
    $rowSet2 = $db2->Execute($sql2);
     
    $array = array_merge($rowSet1->_array, $rowSet2->_array);

  8. #8
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Donc tu es bon pour te faire ta propre fonction de tri sur le tableau final.

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Par défaut
    deux solutions
    soit tu te refais une fonction de tri et tu n'utilise pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array_merge($rowSet1->_array, $rowSet2->_array);
    tu parcours t'es deux row set et tu ajoutes au fur et à mesure en triant

    avantage : gain de perf tu ne crée pas deux tableaux pr ensuite les combinées et le retrier
    inconvénient : algo un peu chiant

    tu utilises la fonction php :
    http://www.php.net/manual/fr/functio...-multisort.php
    avantage tu ne réinventes pas la roue
    inconvénient : plus long

  10. #10
    Membre confirmé Avatar de Devether
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 66
    Par défaut
    Merci bien de vos réponses.

    Je vous avoue je m'en doutais un peu avant de venir poster mais je me suis dis tu ne perds rien à demander.

    Il ne me reste plus qu'a remonter les manches...

    Bye

Discussions similaires

  1. Tri entre deux tableaux
    Par delavega dans le forum ASP
    Réponses: 1
    Dernier message: 14/08/2013, 15h16
  2. Fusion de deux tableaux triés
    Par krolis dans le forum Langage
    Réponses: 17
    Dernier message: 15/03/2011, 11h37
  3. [XL-2007] tri de correspondance sur deux tableaux
    Par vgrenet dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/03/2011, 15h52
  4. Fusion de deux tableaux triés en un tableau trié
    Par adri010 dans le forum Débuter
    Réponses: 8
    Dernier message: 10/06/2010, 19h50
  5. fusionner deux tableaux triés ?
    Par sami_c dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 08/06/2006, 12h19

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