login  Naam:   Wachtwoord: 
Registreer je!
 Forum

5 dezelfde tabellen in 5 verschillende databases in 1 query, kan dat? (Opgelost)

Offline ElleRt - 28/11/2008 14:36
Avatar van ElleRtMySQL interesse Ik heb 5 websites die draaien op hetzelfde script.
Elk website heeft een eigen database met dezelfde tabellen.

Stel, ik wil 1 overzicht maken van die 5 websites (een overzicht van alle subdomeinnamen).

Dat zou moeten kunnen toch?

Ik heb dus 5 connecties met databases gemaakt.
Die noem ik:

  1. $connectie1
  2. $connectie2
  3. $connectie3
  4. $connectie4
  5. $connectie5


Dan wil ik uit die 5 databases dus iets selecteren.
Hoe bouw ik nu die ene select op? Kan ik 1 select draaien op 5 connecties?
Zo ja, kan iemand mij opweg helpen?

Ik zat zelf te denken:

  1. $query = mysql_query("SELECT connectie1.waarde, connectie2.waarde, connectie3.waarde, connectie4.waarde, connectie5.waarde FROM connectie1.tabel, connectie2.tabel, connectie3.tabel, connectie4.tabel, connectie5.tabel ORDER BY waarde ASC") or die(mysql_error());

16 antwoorden

Gesponsorde links
Offline BigBug - 28/11/2008 14:40
Avatar van BigBug PHP expert Ik denk dat je met Joins een heel eind moet kunnen komen.
http://www.site...ySQL/Joins
Offline ElleRt - 28/11/2008 14:47
Avatar van ElleRt MySQL interesse Hoe moet ik de connecties daar dan in verwerken?
Offline Diko - 28/11/2008 15:34 (laatste wijziging 28/11/2008 15:40)
Avatar van Diko PHP interesse Dit werkt als dezelfde gebruik rechten heeft tot alle databases. Maar dat is hoe dan ook een voorwaarde als je in 1 query alle info wilt ophalen

  1. SELECT * FROM `database1`.`tabel`
  2. UNION
  3. SELECT * FROM `database2`.`tabel`
  4. UNION
  5. SELECT * FROM `database3`.`tabel`
  6. UNION
  7. SELECT * FROM `database4`.`tabel`
  8. UNION
  9. SELECT * FROM `database5`.`tabel`


Met joins kan eventueel ook, maar dan krijg je een resultaat van database1 * database2 * etc... dus zou je ontzettend veel records terug krijgen waar je niets aan hebt dus zou je DISTINCT kunnen gebruiken en tis onnodige belasting van je DBMS.
Offline nemesiskoen - 28/11/2008 15:42
Avatar van nemesiskoen Gouden medaille

PHP expert
als je gewoon je queries appart wil doen kan dit via de 2e parameter van mysql_query:
  1. <?php
  2. mysql_query($query, $dbConn1);
  3. mysql_query($query, $dbConn2);
  4. mysql_query($query, $dbConn3);
  5. mysql_query($query, $dbConn4);
  6. mysql_query($query, $dbConn5);
Offline ElleRt - 28/11/2008 16:07
Avatar van ElleRt MySQL interesse Uuhm.. Ja...
Ik ben me nu de hele middag al aan het blindstaren, dus zie eigenlijk niets meer.. hahaa (tijd voor pauze...)..

Ik heb dus dit:

Tabel 1:
id naam
1 Peter
2 Dirk
3 Marloes


Tabel 2
id naam
1 Sandra
2 Willem
3 Arnoud

etc.

Stel, ik wil nu van alle 5 de tabellen, die dus ook allemaal in een aparte database staan en allemaal een aparte connectie nodig hebben, een overzicht op alfabet maken.

Nu wil ik dus dit resultaat krijgen:

Naam:
Arnoud
Dirk
Marloes
Peter
Sandra
Willem

Als ik de quaries apart doe, dan moet ik ze daarna nog gaan samenvoegen, kan dit?
Of moet ik me toch houden aan 1 query met daarin de 5 connecties?

In het voorbeeld van Diko zie ik ook geen connecties terug. de 5 tabellen (en dus databases) hebben allen een eigen aparte inlog.

Iemand nog tips? 
Offline Diko - 28/11/2008 16:25
Avatar van Diko PHP interesse Als ze echt een aparte verbinding nodig hebben zul je het resultaat in een array kunnen zetten en deze vervolgens sorteren ;)
  1. <?php
  2. // hier je verschillende verbindingen en je query's
  3.  
  4.  
  5. // nu alles in array proppen
  6. while($arr = mysql_fetch_assoc($query1)) {
  7. $result[] = $arr;
  8. }
  9. while($arr = mysql_fetch_assoc($query2)) {
  10. $result[] = $arr;
  11. }
  12. // en zo verder
  13.  
  14. // even sorteren
  15. asort($result);
  16. // voila, een op alphabet gesorteerde array
Offline ElleRt - 28/11/2008 16:58
Avatar van ElleRt MySQL interesse Oke..

Ik maak de connecties (voor het gemak 2 tabellen eerst).

  1. $connectie1 = mysql_connect("-","-","-");
  2. $db1 = mysql_select_db('-',$connectie1);
  3.  
  4. $connectie2 = mysql_connect("-","-","-");
  5. $db2 = mysql_select_db('-',$connectie2);


Vervolgens voer ik de query's uit:

  1. $query1 = mysql_query("SELECT domein FROM subdomeinen", $connectie1);
  2. $query2 = mysql_query("SELECT domein FROM subdomeinen", $connectie2);


Vervolgens moet ik dus doen:

  1. while($arr = mysql_fetch_assoc($query1)) {
  2. $result[] = $arr;
  3. }
  4. while($arr = mysql_fetch_assoc($query2)) {
  5. $result[] = $arr;
  6. }


Dan sorteren:

  1. asort($result);


En dan wil ik hem zien:

  1. {
  2. echo "$result\n";
  3. }



Maar dat geeft als resultaat:

Array
Offline skillat2 - 28/11/2008 17:06
Avatar van skillat2 HTML beginner
  1. <?php
  2. for ($i = 1; $i <= count($result); $i++)
  3. {
  4. echo $result[$i].'<br />';
  5. }
  6. ?>
Offline ElleRt - 28/11/2008 17:25
Avatar van ElleRt MySQL interesse Als ik dat doe krijg ik een hele lange lijst met Array
Offline Rik - 28/11/2008 17:31
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Doe eens print_r($result); Want elk record staat als een array in het resultaat (veldnaam => waarde).
Offline skillat2 - 28/11/2008 17:44
Avatar van skillat2 HTML beginner Met het ophalen van de data gaat het fout.
Waar ik "naam" in heb gezet moet je veranderen naar de desbetreffende kolom naam in je tabel (die je wilt ophalen).

  1. while($arr = mysql_fetch_assoc($query1)) {
  2. $result[] = $arr['naam'];
  3. }
  4. while($arr = mysql_fetch_assoc($query2)) {
  5. $result[] = $arr['naam'];
  6. }
Offline ElleRt - 28/11/2008 18:12 (laatste wijziging 28/11/2008 18:14)
Avatar van ElleRt MySQL interesse Ja, nu krijg ik inderdaad wel een lijst te zien..
EDIT:
Oei, maar nog niet door elkaar. Ik krijg nu 2 keer een lijst te zien, eerst van tebel 1, en daarna van tabel 2. Ik zou ze graag samenvoegen.

Nu heb ik alleen nog 2 problemen.

Probleem 1:
Hoe voeg ik ze nu samen?

Probleem 2:
Stel, ik wil achter de naam de tabelnaam neerzetten.
Dus voorbeeld uit het eerdere voorbeeld:

Citaat:
Tabel 1:
id naam
1 Peter
2 Dirk
3 Marloes


Tabel 2
id naam
1 Sandra
2 Willem
3 Arnoud

Naam:
Arnoud (tabel2)
Dirk (tabel 1)
Marloes (tabel 1)
Peter (tabel 1)
Sandra (tabel 2)
Willem (tabel 2)


Hoe doe ik dat nu?
Offline skillat2 - 28/11/2008 20:00
Avatar van skillat2 HTML beginner Het volgende werkt zoals jij wilt:

  1. <?php
  2. # database connectie
  3. $db_con = mysql_connect("localhost", "root", "");
  4.  
  5. # query's'
  6. $query1 = mysql_query('SELECT naam FROM database1.test') or die (mysql_error());
  7. $query2 = mysql_query('SELECT naam FROM database2.test') or die (mysql_error());
  8.  
  9. # array vullen
  10. while($arr = mysql_fetch_assoc($query1))
  11. {
  12. $result[] = $arr['naam'].' (tabel 1)';
  13. }
  14.  
  15. while($arr = mysql_fetch_assoc($query2))
  16. {
  17. $result[] = $arr['naam'].' (tabel 2)';
  18. }
  19.  
  20. # sorteren
  21. sort($result);
  22.  
  23. # gegevens uit de array halen
  24. for ($i = 0; $i < count($result); $i++)
  25. {
  26. echo $result[$i].'<br />';
  27. }
  28. ?>
Offline ElleRt - 28/11/2008 20:28 (laatste wijziging 28/11/2008 20:29)
Avatar van ElleRt MySQL interesse Ja, dat werkt.

Ik heb nu dit:

  1. <?
  2.  
  3. // hier je verschillende verbindingen en je query's
  4. $connectie1 = mysql_connect("-","-","-");
  5. $db1 = mysql_select_db('-',$connectie1);
  6.  
  7. $connectie2 = mysql_connect("-","-","-");
  8. $db2 = mysql_select_db('-',$connectie2);
  9.  
  10.  
  11. $query1 = mysql_query("SELECT domein FROM subdomeinen", $connectie1);
  12. $query2 = mysql_query("SELECT domein FROM subdomeinen", $connectie2);
  13.  
  14. // nu alles in array proppen
  15. while($arr = mysql_fetch_assoc($query1)) {
  16. $result[] = $arr['domein'].'.domein.nl';
  17. }
  18. while($arr = mysql_fetch_assoc($query2)) {
  19. $result[] = $arr['domein'].'.domein.nl';
  20. }
  21.  
  22. // sorteren
  23. sort($result);
  24.  
  25. // gegevens uit de array halen
  26. for ($i = 0; $i < count($result); $i++){ echo $result[$i].'<br />';}
  27.  
  28. ?>


Wat me nu alleen nog niet lukt, is er ook iets voor te zetten.
Ik wil van die resultaten namelijk urls maken.
Dus:
  1. <a href='http://RESULAAT.domein.nl' target='_blank'>RESULAAT</a>


Ik hoop dat iemand me daar nog mee kan helpen!
Offline skillat2 - 28/11/2008 20:40
Avatar van skillat2 HTML beginner Het volgende veranderen:

  1. $result[] = $arr['domein'];


en:

  1. for ($i = 0; $i < count($result); $i++)
  2. {
  3. echo '<a href="http://'.$result[$i].'.domein.nl" target="_blank">'.$result[$i].'</a><br />';
  4. }
Offline ElleRt - 28/11/2008 21:07 (laatste wijziging 28/11/2008 21:08)
Avatar van ElleRt MySQL interesse Oooh.. tuurlijk.. Ik zat me helemaal blind te staren op dat andere stuk voor de echo.. *argh*.

Helemaal super zo! Bedankt!
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.324s