Avatar billede rathkjen Nybegynder
19. november 2008 - 09:39 Der er 7 kommentarer og
1 løsning

Link med fra 2 databaser, men sorter efter navn

Jeg benytter følgende funktion:

<?php
//Database 1
$link1 = mysql_connect('dblink1', 'bruger1', 'kode1') or die('Not connected : ' . mysql_error());
mysql_select_db('database1', $link1) or die ('Can\'t use database1 : ' . mysql_error());

//Database 2
$link2 = mysql_connect('dblink2', 'bruger2', 'kode2') or die('Not connected : ' . mysql_error());
mysql_select_db('database2', $link2) or die ('Can\'t use database2 : ' . mysql_error());

$navne = array();

$res1 = mysql_query("SELECT navn FROM db1 ORDER BY navn",$link1);
if(mysql_num_rows($res1)>0){
    while($row1 = mysql_fetch_assoc($res1)){
        $navne[] = $row1['navn'];
    }
}

$res2 = mysql_query("SELECT navn FROM db2 ORDER BY navn",$link2);
if(mysql_num_rows($res2)>0){
    while($row2 = mysql_fetch_assoc($res2)){
        $navne[] = $row2['navn'];
    }
}

sort($navne);

echo implode('<br />',$navne);

?>

og det virker perfekt, dog vil jeg nu have et link på navnene.

Det gør jeg sådan:

$navne[] = '<a href="?id='.$row1['id'].'">'.$row1['navn'].'';
$navne[] = '<a href="?id='.$row2['id'].'">'.$row2['navn'].'';

men så sorterer den ikke længere efter navn, men efter id, naturligvis.

er der nogen der har en løsning på dette eller en anden idé til hvordan det kunne laves?


//Rathkjen
Avatar billede bitkid Nybegynder
19. november 2008 - 10:18 #1
Det letteste er at lave din echo om og først sætte link på når du udskriver.

Ændr:
    $navne[] = $row1['navn'];
til
    $navne[$row1['id']] = $row1['navn'];

(gør det ved dem begge to)

ændr din sort til natsort

og din echo til:
foreach ($navne AS $id => $navn) {
    echo '<a href="?id='.$id.'">'.$navn.'</a><br />';
}

Håber du kan bruge det :-)
Avatar billede rathkjen Nybegynder
19. november 2008 - 11:47 #2
Ikke helt. den poster kun den sidste i database 2 og skriver ikke id ved den :/
Avatar billede rathkjen Nybegynder
19. november 2008 - 11:47 #3
$navne = array();

$res1 = mysql_query("SELECT navn FROM test ORDER BY navn",$link1);
if(mysql_num_rows($res1)>0){
    while($row1 = mysql_fetch_assoc($res1)){
        $navne[$row1['id']] = $row1['navn'];
    }
}

$res2 = mysql_query("SELECT navn FROM test ORDER BY navn",$link2);
if(mysql_num_rows($res2)>0){
    while($row2 = mysql_fetch_assoc($res2)){
        $navne[$row2['id']] = $row2['navn'];
    }
}

natsort($navne);

foreach ($navne AS $id => $navn) {
    echo '<a href="?id='.$id.'">'.$navn.'</a><br />';
}
Avatar billede rathkjen Nybegynder
19. november 2008 - 11:50 #4
Id'en kan godt være den samme så det kan måske være der skal laves sådan at den kan kende forskel fra de 2 databaser. fx

$navne[''.$row1['id'].'-db1'] = $row1['navn'];

eller sådan noget? kan man det?
Avatar billede bitkid Nybegynder
19. november 2008 - 11:55 #5
ja, det kunne man godt, men så skal du fjerne det igen fra $id når du udskriver. Det kan du selvfølgelig sagtens gøre:

echo '<a href="?id='.substr($id,0,strlen($id)-3).'">'.$navn.'</a><br />';
Avatar billede rathkjen Nybegynder
19. november 2008 - 12:13 #6
Ja nu fanger den i hvert fald 1 fra hver database :) dog mangler den stadig id.

tror den lægger dem oven i hinanden. for det er den sidste i begge databaser den viser.
Avatar billede rathkjen Nybegynder
19. november 2008 - 12:14 #7
ups, sorry min fejl.

SELECT navn FROM test ORDER BY navn",$link2

skal naturligvis også indeholde id.

SELECT id,navn FROM test ORDER BY navn",$link2

så virker det. mange tak for hjælpen

smider point til dig :)
Avatar billede bitkid Nybegynder
19. november 2008 - 12:28 #8
Super :-)

Jeg havde ikke lige set at du ikke hev id ud også :-)

Tak for point.
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