Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
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 29/01/2011, 14h26   #1
Invité de passage
 
Inscription : mars 2010
Messages : 25
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 25
Points : 2
Points : 2
Par défaut Rassembler résultats de 2 requetes sql

Bonjour,

J'aimerais rassembler les résultats de 2 requêtes identiques.
Je m'explique, j'ai 2 bases, avec chacune une table pays(Nom, Ville).
Dans la première table j'ai par exemple :
France Paris
France Marseille
USA Los Angeles
Russie Moscou
Et dans la deuxieme :
France Lyon
USA New-York

Ma requete est SELECT count(*) as nb From Pays GROUP BY Nom, ORDER BY nb

je récupère donc :
France 2
USA 1
Russie 1
et :
France 1
USA 1

je voudrais pouvoir joindre les résultats pour avoir :
France 3
USA 2
Russie 1


Est-ce possible facilement de joindre les résultats des 2 rèquetes ?
dzaohfz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 14h55   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
peut etre
Code :
1
2
SELECT SUM(nb) FROM
(SELECT COUNT(*) as nb FROM table1 GROUP BY nom UNION SELECT COUNT(*) as nb FROM table2 GROUP BY nom )
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 15h08   #3
Invité de passage
 
Inscription : mars 2010
Messages : 25
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 25
Points : 2
Points : 2
Citation:
Envoyé par sabotage Voir le message
peut etre
Code :
1
2
SELECT SUM(nb) FROM
(SELECT COUNT(*) as nb FROM table1 GROUP BY nom UNION SELECT COUNT(*) as nb FROM table2 GROUP BY nom )
Mais non comme j'ai dit c'est dans 2 bases différentes
dzaohfz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 15h57   #4
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 706
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 706
Points : 3 274
Points : 3 274
Salut

Citation:
Mais non comme j'ai dit c'est dans 2 bases différentes
Si les 2 bases sont sur le même serveur MySQL, tu peux le faire, suffit de rajouter/préfixer le nom de la base aux champs, et exploiter les alias au besoin.

Exemple (bidon) :
Code sql :
1
2
3
4
 
SELECT a.nom AS nomA, b.nom AS nomB
FROM baseA.unetable AS a
JOIN baseB.unetable AS b ON b.id = a.id
Théoriquement ça devrait fonctionner grâce aux alias (a et b) même si les noms des tables et des champs sont les mêmes dans 2 Bdd différentes.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 16h04   #5
Invité de passage
 
Inscription : mars 2010
Messages : 25
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 25
Points : 2
Points : 2
Citation:
Envoyé par RunCodePhp Voir le message
Salut

Si les 2 bases sont sur le même serveur MySQL, tu peux le faire, suffit de rajouter/préfixer le nom de la base aux champs, et exploiter les alias au besoin.

Exemple (bidon) :
Code sql :
1
2
3
4
 
SELECT a.nom AS nomA, b.nom AS nomB
FROM baseA.unetable AS a
JOIN baseB.unetable AS b ON b.id = a.id
Théoriquement ça devrait fonctionner grâce aux alias (a et b) même si les noms des tables et des champs sont les mêmes dans 2 Bdd différentes.
Oui mais c'est justement sur 2 serveurs différents
dzaohfz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 17h32   #6
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 706
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 706
Points : 3 274
Points : 3 274
Citation:
Envoyé par dzaohfz
Oui mais c'est justement sur 2 serveurs différents
A ben ça tu ne l'avais pas dis.

Cette fois, je ne crois pas que ce soit possible, mais je suis loin, même très loin d'avoir tout vu sur MySQL.

Donc sauf erreur, il te reste plus qu'à faire 2 requêtes SQL sur chaque serveur pour ensuite exploiter les tableaux en Php pour fusionner le tout.
Un array_intersect() peut être.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 17h38   #7
Invité de passage
 
Inscription : mars 2010
Messages : 25
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 25
Points : 2
Points : 2
Oui je cherche une fonction php pour combiner mes 2 tableaux en additionnant quand le nom est le même.
array_intersect ça ressort les valeurs communes aux 2 tableaux mais sans addtionner
dzaohfz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 17h51   #8
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 706
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 706
Points : 3 274
Points : 3 274
et array_merge ?

Question quand même : Est ce que les clés (les Ids) sont les mêmes pour 2 données théoriquement identiques ?
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 17h52   #9
Invité de passage
 
Inscription : mars 2010
Messages : 25
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 25
Points : 2
Points : 2
Citation:
Envoyé par RunCodePhp Voir le message
et array_merge ?
Ca n'additionne pas non plus pour les même nom il me semble
dzaohfz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 18h00   #10
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 706
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 706
Points : 3 274
Points : 3 274
Sinon, array_push ?

Ou alors créer un 3ème tableau qui stockera le tableau Bdd1 et Bdd2, genre :
Code :
1
2
3
 
$array[0] = $bdd1;
$array[1] = $bdd2;
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 18h03   #11
Invité de passage
 
Inscription : mars 2010
Messages : 25
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 25
Points : 2
Points : 2
Citation:
Envoyé par RunCodePhp Voir le message
Sinon, array_push ?

Ou alors créer un 3ème tableau qui stockera le tableau Bdd1 et Bdd2, genre :
Code :
1
2
3
 
$array[0] = $bdd1;
$array[1] = $bdd2;
ça ne m'additionne toujours pas pour les même noms
dzaohfz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 18h08   #12
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
on peut peut etre faire mieux :
Code :
1
2
3
4
5
6
7
8
foreach ($tableau1 as $key=>$value) {
       if (isset($tableau2[$key])) {
                $tableau1[$key] += $tableau2[$key];
                unset($tableau2[$key]);
       }
}
 
array_merge($tableau1, $tableau2);
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 18h11   #13
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 706
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 706
Points : 3 274
Points : 3 274
Il faudrait alors le faire "à la mano", comme parcourir une des tableaux, puis en boucle parcourir le 2ème et faire une comparaison et l'addition au besoin tout en recréant un 3ème tableau final.

Ce que tu veux est peut être trop spécifique pour qu'une fonction existe.
Pour ma part, je ne vois pas.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 18h13   #14
Invité de passage
 
Inscription : mars 2010
Messages : 25
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 25
Points : 2
Points : 2
Citation:
Envoyé par sabotage Voir le message
on peut peut etre faire mieux :
Code :
1
2
3
4
5
6
7
8
foreach ($tableau1 as $key=>$value) {
       if (isset($tableau2[$key])) {
                $tableau1[$key] += $tableau2[$key];
                unset($tableau2[$key]);
       }
}
 
array_merge($tableau1, $tableau2);
PAS MAL


EDIT: Ca marche nickel merci beaucoup
dzaohfz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web