arrays met zoekresultaten uit 2 databases samenvoegen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Zuppo

zuppo

25/01/2008 21:53:00
Quote Anchor link
... en in één keer uitlezen.

Da's wat ik graag wil kunnen doen. De situatie
- één database: database1 (tabel: test, velden: id en naam)
- een tweede database: database2 (tabel: test2, velden: id en persoon)
De beide databases bevinden zich niet op dezelfde server.
De velden naam en persoon bevatten eenzelfde soort gegevens.

Wat me lukt: achtereenvolgens met de ene en daarna met de andere database een connectie maken en via een query de gegevens ophalen en uitschrijven.
Resultaat:
- naam1
- naam2
- ...
- persoon 1
- persoon 2
- persoon 3
...

Nu wil ik graag de resultaten uit beide queries samen gooien, alfabetisch sorteren en vervolgens in z'n geheel uitschrijven.
Naam1
Persoon1
Naam2
Persoon2
...
't Zal misschien supersimpel zijn, maar ik raak er toch niet uit.
Geeft iemand een duwtje?
Gewijzigd op 01/01/1970 01:00:00 door Zuppo
 
PHP hulp

PHP hulp

17/11/2024 20:01:59
 
- SanThe -

- SanThe -

25/01/2008 23:42:00
Quote Anchor link
Alles in 1 array() gooien en array() sorteren?
 
Jan Koehoorn

Jan Koehoorn

25/01/2008 23:45:00
Quote Anchor link
Wel een gekke situatie om twee verschillende databases te gebruiken voor twee tabellen die zo op elkaar lijken. Waarom heb je dat zo?
 
Storeman storeman

storeman storeman

25/01/2008 23:50:00
Quote Anchor link
Ik snap je probleem niet helemaal. Je kunt beide arrays toch sorteren, dit zou zelfs al in je query kunnen? Je resultaat doorloop je dan gewoon en sla je tijdelijk op in een array.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?
$arr1
= array();
while($row = mysql_fetch_result()){
$arr1[] = $row;
}


// Fetch je 2e resultaat
$arr12 = array();
while($row = mysql_fetch_result()){
$arr2[] = $row;
}


for($i=0; $i<count($arr1); $i++){
echo $arr1[$i].$arr2[$i];
}

?>


Je zult een link moeten hebben tussen de rijen, als het volgende tenminste niet mag gebeuren:

naam1 persoon1
naam2 persoon3 (omdat persoon 2 ontbreekt)
 
Pieter van Linschoten

Pieter van Linschoten

26/01/2008 00:13:00
Quote Anchor link
Daarom kan je denk ik beter een 2 dimensionale array gebruiken:
met de resultaten, waarin de eerste dimensie de naam + id als sleutel heeft. Dit om dubbele waarden te voorkomen. Vervolgens kun je er dan een sort() overheen gooien, om het al op alfabetische volgorde te krijgen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?
$array
[naam_id][gegevens] = "waarde";
$array[persoon_id][gegevens] = "waarde";
?>


Tenzij bij allebei de tabellen nr 523 jantje heten...
Gewijzigd op 01/01/1970 01:00:00 door Pieter van Linschoten
 
Zuppo

zuppo

26/01/2008 10:28:00
Quote Anchor link
Fijne lieden,

bedankt voor jullie reacties. Jullie maken het blijkbaar graag laat op vrijdagavond. Was al in bed geklommen ...
@ Jan: 't is de bedoeling om de inhoud van een externe database met gelijkaardige gegevens via een zoekscherm te koppelen aan een eigen database. Vandaar de overeenkomst in de structuur ...
@Santhe, Storeman en Lapidi: misschien heb ik jullie een beetje op het verkeerde been gezet met m'n voorbeeld. Ik wil als resultaat een lijst met '1 kolom' van namen die alfabetisch gesorteerd is.
Dus als in database 1 de namen Jan, Piet, Miet zitten en in database2 Ann, Roos en Dirk, dan moet m'n resultaat uitgeschreven als Ann, Dirk, Jan Piet, Miet, Roos.

Edit:

Eureka! Heb 't intussen dank zij jullie hints voor elkaar gekregen.

// eerste array
$arr1 = array();
while($row1 = mysql_fetch_array($res)){
$arr1[] = $row1[naam];
}

// tweede array
$arr2 = array();
while($row2 = mysql_fetch_array($res2)){
$arr2[] = $row2[persoon];
}

$arrdef = array_merge ($arr1,$arr2);
sort ($arrdef);

//bekijken
print_r ($arrdef);

Die suggestie om dubbels te filteren lijkt me zeker relevant. Ben ik nog niet helemaal achter hoe dat moet ...
Gewijzigd op 01/01/1970 01:00:00 door zuppo
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.