Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
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 27/04/2011, 10h12   #1
Futur Membre du Club
 
Développeur informatique
Inscription : mars 2004
Messages : 64
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : mars 2004
Messages : 64
Points : 18
Points : 18
Envoyer un message via MSN à Devether
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 :
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.
__________________
L'homme sage apprend de ses erreurs, l'homme plus sage apprend des erreurs des autres. Lao Tseu ;o)
Devether est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2011, 10h24   #2
Membre Expert
 
Inscription : avril 2006
Messages : 1 338
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : avril 2006
Messages : 1 338
Points : 1 315
Points : 1 315
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..
__________________
Stay in Bed .. Save Energy
boo64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2011, 11h51   #3
Futur Membre du Club
 
Développeur informatique
Inscription : mars 2004
Messages : 64
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : mars 2004
Messages : 64
Points : 18
Points : 18
Envoyer un message via MSN à Devether
Les deux tableaux sont créés depuis deux bases différentes. Comment tu fais pour faire un seul tableau ??
__________________
L'homme sage apprend de ses erreurs, l'homme plus sage apprend des erreurs des autres. Lao Tseu ;o)
Devether est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2011, 11h59   #4
Membre Expert
 
Inscription : avril 2006
Messages : 1 338
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : avril 2006
Messages : 1 338
Points : 1 315
Points : 1 315
montre moi ton code de création du tableau
__________________
Stay in Bed .. Save Energy
boo64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2011, 13h17   #5
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
Si les deux bases sont sur le même serveur tu peux faire une jointure entre les deux tables sans soucis.

Exemple :
Code sql :
1
2
SELECT ....
FROM bdd1.table1 INNER JOIN bdd2.table2 ON ....
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2011, 13h27   #6
Membre Expert
 
Inscription : avril 2006
Messages : 1 338
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : avril 2006
Messages : 1 338
Points : 1 315
Points : 1 315
ici ça serait plutot un union qu'il faudrait je pense :

Code :
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;
__________________
Stay in Bed .. Save Energy
boo64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2011, 14h44   #7
Futur Membre du Club
 
Développeur informatique
Inscription : mars 2004
Messages : 64
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : mars 2004
Messages : 64
Points : 18
Points : 18
Envoyer un message via MSN à Devether
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 :
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);
__________________
L'homme sage apprend de ses erreurs, l'homme plus sage apprend des erreurs des autres. Lao Tseu ;o)
Devether est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2011, 15h15   #8
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
Donc tu es bon pour te faire ta propre fonction de tri sur le tableau final.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2011, 15h19   #9
Membre Expert
 
Inscription : avril 2006
Messages : 1 338
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : avril 2006
Messages : 1 338
Points : 1 315
Points : 1 315
deux solutions
soit tu te refais une fonction de tri et tu n'utilise pas
Code :
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
__________________
Stay in Bed .. Save Energy
boo64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2011, 15h50   #10
Futur Membre du Club
 
Développeur informatique
Inscription : mars 2004
Messages : 64
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : mars 2004
Messages : 64
Points : 18
Points : 18
Envoyer un message via MSN à Devether
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
__________________
L'homme sage apprend de ses erreurs, l'homme plus sage apprend des erreurs des autres. Lao Tseu ;o)
Devether 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 08h07.


 
 
 
 
Partenaires

Hébergement Web