webForumDet fria alternativet

Flera db öppna samtidigt?

PHP

9 svar · 197 visningar · startad av GrodanBoll

Medlem sedan sep. 2001788 inlägg
Frågan#1

Tjo på er

Om man lägger dbkopplingarna som klasser, så att man accessar en db genom att skapa ett objekt.
Är det inte då möjligt att ha flera dbkopplingar öppna samtidigt?
Om så, vad tror ni det kostar i prestanda?

/Grodan :)

Medlem sedan juli 2000449 inlägg
#2

Det kan fungera med en massa meckande. Du kommer dock inte kunna skjuta in data i två databaser i samma SQL-sats.

Hur mycket data handlar det om? Det är inte säkert att du märker någon prestandaförsämring om du jobbar med ett litet projekt.

Varför kan du inte ha en(1) databas?

------------------
DinDator.nu: En sida som riktar sig till dig som vill lära sig mer om datorer och internet.

Medlem sedan sep. 2001788 inlägg
#3

Kan inte, måste hämta data från andra databaser i landet :(
På plats kommer jag antagligen *hoppas* bara att behöva 1 db.

Så problemet är att jag behöver hämta en del data från en db och en del annan data från en annan db. Sen behöver jag sammanställa dett apå en sida eller i ett formulär...

Jag vet inte hur jag ska angripa problemet?

/Grodan

Medlem sedan juli 2000449 inlägg
#4

Jag vet inte hur strukturen för ditt system ser ut men följande exempel kanske kan ge lite tips:

Du har en databas i Oslo som innehåller medlemsinformation.

Du har en databas på din sajt som innehåller material som är kopplat till databasen i Oslo.

Plocka ut materialet ur din db, där får du även ett ref_id till medlemsdatabasen. Stäng ned kopplingen till db.

Koppla upp till medlemsdatabasen i Olso och hämta medlem med id:t som du fick som ref_id.

Alltså. För att hämta data från flera databaser: Ställ många SQL-satser.

------------------
DinDator.nu: En sida som riktar sig till dig som vill lära sig mer om datorer och internet.

Medlem sedan sep. 2001788 inlägg
#5

Bugar o tackar för svaren :), men har en fråga till...

Men hur e det bäst att mellanlagra datan?
I en array kanske?

/Grodan

Medlem sedan mars 20007 896 inlägg
#6

Om du använder MySQL kan du med mysql_fetch_array($resultFromQuery); få all hämtad information i en array. Det är ju även det vanligaste sättet att använda sig av när man bara använder en databas ;)

Äh, vaffan, jag bifogar ett exempel :)

<?php
mysql_connect("mysql.host.com", "uID", "uPass")
	or die("No connection");
mysql_select_db("dinDB")
	or die("No DB");

$resultFromQuery = mysql_query("SELECT * FROM dinTabell")
	or die("MySQL-error: " . mysql_error());

$resultSuperArray = mysql_fetch_array($resultFromQuery);

mysql_close();

mysql_connect("mysql.host2.com", "uID", "uPass")
	or die("No connection");
mysql_select_db("dinAndraDB")
	or die("No DB");

osv...
?>

Hoppas det hjälper :)

------------------
SPiN, bjorne.w@telia.com

-- Den som går i andras fotspår kommer aldrig först --

[Redigerat av SPiN den 15 okt 2001]

Medlem sedan sep. 2001788 inlägg
#7

Thx :)

Japp vet, men hur ser en sådan array ut? Blir den en eller två dimensionell?
E det så kasst att värdena läggs eftervarandra på en lång rad eller? Eller det e kanske inte kasst? ;)
Vet inte hur den arrayn ser ut?

Isåfall skulle jag ju vilja föra in datan från den andra sökningen i den första, men det e väl antagligen lättast att loopa två ggr istället?

/Grodan

[Redigerat av GrodanBoll den 15 okt 2001]

Medlem sedan mars 20007 896 inlägg
#8

Arrayen ser ut som en tabell, med de fält som du valde med SQL-queryn.
Ex:

$result = mysql_query("SELECT namn, email, icq FROM minTabell ORDER BY namn ASC")
&nbsp; &nbsp; or die(mysql_error());
$superArray = mysql_fetch_array($result);

Koden genererar en tabell som skulle kunna se ut så här:

namn		email				icq
SPiN			bjorne.w@telia.com	000

Du hämtar datan från PHP'n på det här sättet:

echo "Namn: " . $superArray['namn'] . "<br>";
echo "Email: " . $superArray['email'] . "<br>";
osv...

------------------
SPiN, bjorne.w@telia.com

-- Den som går i andras fotspår kommer aldrig först --

Medlem sedan mars 20007 896 inlägg
#9

Hmm... Insåg just att det där inte var en bra lösning. mysql_fetch_array($result); returnerar bara en rad från databasen ju.

Du skulle kunna använda den här funktionen som jag skrev ihop:

function storeInArray($resultFromQuery) {
	$counter = 0;
	$fields = mysql_num_fields($resultFromQuery);
	
	while($row = mysql_fetch_array($resultFromQuery)) {
		for($i = 0; $i < $fields; $i++) {
			$superArray[mysql_field_name($resultFromQuery, $i)][$counter] = $row[$i];
		}
		$counter++;
	}
	
	return $superArray;
}

Den returnerar en array i form av en tabell, med de fältnamn som du plockade ut från databasen i första dimensionen samt informationen i fälten i den underliggande numrerade dimensionen.

Ex:
Tabellen Users

id	namn	email	icq
1	SPiN		bjorne.w@telia.com	000
2	GrodanBoll	vet@inte.nu	001
osv...

Scriptet:

...
$result = mysql_query("SELECT namn, email, icq FROM Users");

$minSuperArray = storeInArray($result);

for($i = 0; $i < count($minSuperArray['namn']); $i++) {
    echo "Namn: " . $minSuperArray['namn'][$i] . "<br>";
}

Scriptet hämtar ut alla namn, email och ICQ# från tabellen Users, och skriver sedan ut namnen.

Hoppas du förstår hur min funktion bygger upp arrayen, om inte: Du är välkommen att fråga :)

Lycka till! :)

------------------
SPiN, bjorne.w@telia.com

-- Den som går i andras fotspår kommer aldrig först --

[Redigerat av SPiN den 15 okt 2001]

Medlem sedan sep. 2001788 inlägg
#10

Kanon, tror faktiskt det nästan e exakt vad jag behöver...

Jag bugar o tackar :) :)

/Grodan

262 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)