Avatar billede mtrolle Nybegynder
24. juni 2007 - 21:32 Der er 7 kommentarer og
1 løsning

Kommunikere mellem 2 databaser på 2 servere

Hej,

Jeg har behov for at kunne lave en NOT IN forespørgelse mellem 2 servere (a og b).
I PHP kan jeg fx lave 2 connections
$a = mysql_connect('1.1.1.1','user','password');
$b = mysql_connect('2.2.2.2','user','password');

Herefter kan jeg så lave en forespørgelse på de forskellige connections således:
mysql_query("SELECT * FROM tabel1",$a); //forespørger i a server
mysql_query("SELECT * FROM tabel2",$b); //forespørger i b server

nu vil jeg bare gerne lave en forespørgelse således:
mysql_query("SELECT * FROM `tabel1` WHERE `field1` NOT IN (SELECT `field2` FROM `tabel2`)");


Kan det lade sig gøre på en måde?
Avatar billede mikkelk Nybegynder
24. juni 2007 - 21:41 #1
Tror ikke det lader sig gøre hvis der er tale om to forskellige databaseservere.
Avatar billede jakobdo Ekspert
24. juni 2007 - 21:41 #2
Jeg tror ikke du kan lave en NOT IN SUBQUERY på tværs af 2 servere.
Du kan jo have selve php koden på maskine 1, som så forbinder til mysql server 2 og mysql server 3.
Det vil sige mysql server 2 og 3 snakker jo ikke direkte sammen.
Jeg tror jeg ville trække data ud fra server 1 og så lave en query efterfølgende mod server 2.
Avatar billede coderdk Praktikant
24. juni 2007 - 22:50 #3
Bare del det op:

$qb = mysql_query("SELECT `field2` FROM `tabel2`". $b);
$res = array();
while ( $row = mysql_fetch_assoc( $qb ) )
{
  $res[] = $row['field2'];
}
$ids = implode(",",$res);
$qa = mysql_query("SELECT * FROM `tabel1` WHERE `field1` NOT IN ($ids)", $a);

:)
Avatar billede gider_ikke_mere Nybegynder
25. juni 2007 - 01:42 #4
coderdk: Det kan man vel ikke (i alle tilfælde), hvis det er på 2 forskellige servere hos forskellige udbydere...
Avatar billede coderdk Praktikant
25. juni 2007 - 02:41 #5
akyhne, Joh, såfremt at de tillader ekstern adgang til databasen, hvilket jeg går ud fra de gør i dette tilfælde - mtrolle, du kan godt fra webserveren lave alm. queries på begge databaser, korrekt?
Jeg går i øvrigt ud fra at field1 og field2 er INTs...
Avatar billede gider_ikke_mere Nybegynder
25. juni 2007 - 03:12 #6
Ok. Det var bare fordi du skrev som om det i alle tilfælde kunne lade sig gøre. Web10 og One(B-one) understøtter det. f.eks ikke.
Avatar billede mtrolle Nybegynder
25. juni 2007 - 09:33 #7
>coderdk
Helt sikkert den bedste mulighed, hvis man ikke kan joine de to database på en måde.
Det gør bare mit arbejde så meget mere besværligt.

Men smid et svar - ender sku nok i den løsning alligevel.
Avatar billede coderdk Praktikant
25. juni 2007 - 11:09 #8
Ok :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester