Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: MsSQL, usean tietokannan tietojen yhdistäminen

Hirwi [30.06.2011 22:03:31]

#

Moro, onko kenelläkään heittää vinkkiä miten onnistuu useamman tietokannan tietojen yhdistäminen järkevästi, jos onnistuu. Alla on pienimuotoinen esimerkki siitä mitä koetan hakea takaa.

Tarkoitus on hakea kahdesta (tai useammasta) tietokannasta tiedot ja yhdistää ne jotenkin fiksusti. Tavoitteena olisi, että tietokannat järjestettäisiin tässä tapauksessa Domainin perusteella, INT_DOMAIN ja US_domain aakkosjärjestykseen. Ongelmana on, että tuo nykyinen koodi tulostaa ensin tiedot database1(taulukko:TEST1) ja perään tiedot database2(taulukko:TEST2), eikä niitä näin ollen pysty järjestämään.?

Toinenkin kysymys löytyy ja se liittyy 'rawurldecodeen/rawurencodeen'. Kun otan tiedot suoraan tietokannasta1 komennolla 'SELECT *' antaa se skandit ja erikoismerkit encodattuna. Esim. test@hotmail.com tulee tietokannasta tyyliin test%40hotmail%2fecom. rawurldecode auttaa siihen, että ne näkyvät oikein näytöllä, "rawurlencode($searchString)" haussa auttaa vain sen verran, että @-merkilliset tekstit sen avulla löytyvät oikein(test@hotmail antaa tulokseksi tiedot, joissa on kyseinen teksti), mutta pisteelle(.) ei encodausta tehdä?(hotmail.com ei anna yhtään tulosta vaikka tietokannassa on test@hotmail.com)
Onkohan tähän, jotain fiksua ratkaisukeinoa? Voiko esim. tietokannan "asetuksia" muuttamalla vaikuttaa tähän, tietokannoista vielä sen verran, että ne sisältävät satoja rivejä tietoa ja ovat alunperin toisen tahon tekemiä.

<html>
<head><title>Search</title></head>
<body>
	<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
		<input type="text" name="searchtext" value="">
		<input type="submit" name="submit" value="Search">
	</form>
</body>
</html>
<?php

$dbHost1 = "server1";
$dbUser1 = "user1";
$dbPass1 = "pw1";
$dbName1 = "database1";

$dbHost2 = "server2";
$dbUser2 = "user2";
$dbPass2 = "pw2";
$dbName2 = "database2";

$searchString = $_POST['searchtext'];

$dbHandle1 = mssql_connect($dbHost1, $dbUser1, $dbPass1);
$dbHandle2 = mssql_connect($dbHost2, $dbUser2, $dbPass2);

if (!$dbHandle1 && !$dbHandle2) {
	die('Connect to SQL Server failed');
}

$selectDb1 = mssql_select_db($dbName1, $dbHandle1);
$selectDb2 = mssql_select_db($dbName2, $dbHandle2);

if (!$selectDb1 && !$selectDb2) {
	die('Connect to DB Failed');
}

if (isset($_POST['submit']))
{
echo "SEARCHTEXT: ".$searchString."<br/><br/>";
echo "SEARCHTEXT WITH RAWURLENCODE: ".rawurlencode($searchString)."<br/><br/>";
echo "<br/>";

		if ($searchString == '')
		{
			echo "Give some search text";
		}
		else
		{

$result1 = mssql_query("SELECT * FROM TEST1 WHERE INT_EMAIL LIKE '%".rawurlencode($searchString)."%' OR
INT_NAME LIKE '%".rawurlencode($searchString)."%' OR
INT_DOMAIN LIKE '%".rawurlencode($searchString)."%'", $dbHandle1);

$result2 = mssql_query("SELECT * FROM TEST2 WHERE US_firstname LIKE '%".$searchString."%' OR US_lastname LIKE '%".$searchString."%' OR
US_email LIKE '%".$searchString."%' OR
US_adress LIKE '%".$searchString."%' OR
US_city LIKE '%".$searchString."%' OR
US_domain LIKE '%".$searchString."%'", $dbHandle2);

				while ($row = mssql_fetch_assoc($result1))
					{
					echo rawurldecode($row[INT_DOMAIN]);
					echo "<br/>";
					}

				while ($row = mssql_fetch_assoc($result2))
					{
					echo "<b>";
					echo $row['US_domain'];
					echo "</b>";
					echo "<br/>";
					}


		}
	}

?>

Grez [30.06.2011 22:10:04]

#

Mikset vaan yhdistä kantoja, kun kuitenkin kyseessä on kaksi äärimmäisen pientä kantaa ("satoja rivejä")

Hirwi [30.06.2011 22:25:24]

#

Hmm. Tarkoitat ilmeisesti, että "fyysisesti" taulukko1 ja taulukko2 yhteen? Valitettavasti se ei ole tässä tapauksessa luultavasti mahdollista, sen vuoksi olisinkin kiinnostunut tietämään josko toisenlaista ratkaisua on saatavilla. Ja satoja oli ehkä vähän alakanttiin, tarkalleen ottaen n. 25000 riviä / taulukko.

hernih [30.06.2011 23:36:57]

#

Onko se data taulussa nyt sitten ihan normaalimuodossa, vai onko se siellä encoodattuna?Vai haetako kannasta nyt hakusanalla mikä on encoodattu ja sitä verrataan tietokannsa taas tuohon normaalimuotoon, koska eihän se silloin toimi oikein.

Ja 50 000 rivistäkään ei missään nimessä saisi tulla vielä ongelmia.

Jokotai [30.06.2011 23:51:34]

#

Itse hakisin ensin tietokannat ja kopioisin ne uuten arrayhin, jonka sitten järjestelisin. Jos mitä haet?

Vastanneille: vaikeimman kautta saa toteuttaa, jos siitä vaikka oppisi jotain.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta