Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: MySQL tietokantaongelma

merlin [07.03.2011 20:07:17]

#

Nyt olen tietokantojen kimpussa ja olen jo omasta mielestäni "onnistuneesti" jo suunnitellut tietokantaa, joka käsittää virtuaalihevosten tietoja.

Eli siis minulla on kaksi "päätaulua", jonne kerään kaikista hevosista tietoa. Taulut "hevoset" ja "kasvatit". Hevoset taulussa on omilla riveillään jokaisen hevosen perustiedot (nimi, rotu, ikä) ja kasvatit taulussa on listattuna kaikki tallini jälkeläiset.
Ongelma tulee vastaan kun jokaiselle hevoselle tulisi tehdä oma kilpailutaulu. Kilpailuita kun ei voi yksinkertaisesti omasta mielestäni sisällyttää hevosten omille riveille "hevoset" -tauluun. Lisäksi yhteinen kilpailutietokanta olisi aivan liian iso (yli 100 hevosta, jokaisella noin 100-300 kisaa). Kaikki sujuu hyvin siihen asti, kun tiedot pitäisi esittää itse sivulla. Miten saan koodin valitsemaan tietyn hevosen taulun, kun taulun nimi on aina kil_[hevosen id].

Itse hevossivu on tällainen (huomioikaa, että ensimmäistä kertaa tekemässä tietokantaa, koodi saattaa näyttää sekavalta :D):

<?php
// yhteys tietokantaa + virheenkäsittely on tässä ;)

// valmistetaan kysely
$kysely = $yhteys->prepare("SELECT * FROM hevoset WHERE id = '$id';");
// suoritetaan kysely
$kysely->execute();

// näytetään kyselyn tulokset taulukossa

// käsitellään tulostaulun rivit yksi kerrallaan
while ($rivi = $kysely->fetch()) {
    // $rivi["virallinennimi"] sisältää nimen
    // $rivi["rotu"] sisältää hinnan
	echo "<h1>" . $rivi["virallinennimi"] . " <sup>" . $rivi["arvonimet"] . "</sup></h1>";
		echo "<center><img src=\"http://karma.viuhka.fi/img/h/" . $rivi["id"] . ".jpg\" class=\"koriste\" title=\"" . $rivi["kuvaaja"] . "\" /></center>" ;
    echo "<p class=\"tiedot\"><img src=\"http://karma.viuhka.fi/img/fin.jpg\" class=\"flag\" /> " . $rivi["virallinennimi"] . " on " . $rivi["varijamerkit"] . " " . $rivi["rotu"] . " " . $rivi["sukupuoli"] . " - " . $rivi["sakakorkeus"] . "<br />Syntynyt " . $rivi["syntymaaika"] . ", " . $rivi["painotus"] . "painotteinen (" . $rivi["kapasiteetti"] . ")</p>";
	echo "<p class=\"tiedot\"><img src=\"http://karma.viuhka.fi/img/uk.jpg\" class=\"flag\" /> " . $rivi["virallinennimi"] . " is " . $rivi["en_varijamerkit"] . " " . $rivi["en_rotu"] . " " . $rivi["en_sukupuoli"] . " - " . $rivi["sakakorkeus"] . "<br />Born " . $rivi["syntymaaika"] . ", " . $rivi["en_painotus"] . " (" . $rivi["kapasiteetti"] . ")</p>";
	echo "<p>Breeder/kasvattaja: " . $rivi["kasvattaja"] . "<br />Seller/maahantuoja: ". $rivi["maahantuoja"] .  "</p>";
	echo "<p>" . $rivi["luonne"] . "</p>";
}
?>

<h1>Pedigree / sukutaulu</h1>

<?php
// yhteys tietokantaa + virheenkäsittely on tässä ;)

// valmistetaan kysely
$kysely = $yhteys->prepare("SELECT * FROM hevoset WHERE id = '$id';");
// suoritetaan kysely
$kysely->execute();

// näytetään kyselyn tulokset taulukossa

// käsitellään tulostaulun rivit yksi kerrallaan
while ($rivi = $kysely->fetch()) {
    // $rivi["virallinennimi"] sisältää nimen
    // $rivi["rotu"] sisältää hinnan
	echo "<p><center><table cols=\"3\" class=\"suku\"><tbody><tr>";
	echo "<td rowspan=\"4\"><b>sire/isä:</b>" . $rivi["isa"] . "</td>" ;
	echo "<td rowspan=\"2\"><b>ii:</b>" . $rivi["ii"] . "</td>" ;
	echo "<td><b>iii:</b>" . $rivi["iii"] . "</td></tr>" ;
	echo "<td><b>iie:</b>" . $rivi["iie"] . "</td></tr>" ;
	echo "<tr><td rowspan=\"2\"><b>ie:</b>" . $rivi["ie"] . "</td>" ;
	echo "<td><b>iei:</b>" . $rivi["iei"] . "</td></tr>" ;
	echo "<tr><td><b>iee:</b>" . $rivi["iee"] . "</td></tr>" ;

	echo "<tr><td rowspan=\"4\"><b>dam/emä:</b>" . $rivi["ema"] . "</td>" ;
	echo "<td rowspan=\"2\"><b>ei:</b>" . $rivi["ei"] . "</td>" ;
	echo "<td><b>eii:</b>" . $rivi["eii"] . "</td></tr>" ;
	echo "<td><b>eie:</b>" . $rivi["eie"] . "</td></tr>" ;
	echo "<tr><td rowspan=\"2\"><b>ee:</b>" . $rivi["ee"] . "</td>" ;
	echo "<td><b>eei:</b>" . $rivi["eei"] . "</td></tr>" ;
	echo "<tr><td><b>eee:</b>" . $rivi["eee"] . "</td></tr>" ;
	echo "</tbody></table></center></p>" ;
}
?>

</tbody></table>
</center></p>

<h1>Offspring / jälkeläiset</h1>

<h1>Competitions / kilpailut</h1>

Ja näyttää tältä.

kil_1 taulusta löytyy seuraavat sarakkeet:
- päivämäärä
- paikka
- luokka
- tulos
- muuta
- laji

Mikä koodi siis valitsee kilpailutaulun hevosen idin perusteella? Olen ihan hukassa ja tekstinikin saattaa vaikuttaa erittäin epäselvältä - toivottavasti joku ymmärtää <3

Grez [07.03.2011 20:20:55]

#

merlin kirjoitti:

Ongelma tulee vastaan kun jokaiselle hevoselle tulisi tehdä oma kilpailutaulu.

Ei todellakaan pitäisi vaan yksi kilpailutaulu kaikille kilpailuille ja yksi tulostaulu kaikille hevosille ja kilpailuille.

merlin kirjoitti:

Kilpailuita kun ei voi yksinkertaisesti omasta mielestäni sisällyttää hevosten omille riveille "hevoset" -tauluun. Lisäksi yhteinen kilpailutietokanta olisi aivan liian iso (yli 100 hevosta, jokaisella noin 100-300 kisaa)

Tarkoititko kenties että yli 100 000 hevosta ja jokaisella noin 100 000 - 300 000 kisaa? Siinä tapauksessa tosiaan taulusta tulisi isohko (20 miljardia riviä) mutta se hoituisi järkevimmin kantamoottorin tarjoamilla työkaluilla eikä jakamalla useaan erinimiseen tauluun. 20 000 riviä on vielä naurettavan pieni taulu.

-tossu- [07.03.2011 20:22:13]

#

merlin kirjoitti:

Lisäksi yhteinen kilpailutietokanta olisi aivan liian iso (yli 100 hevosta, jokaisella noin 100-300 kisaa). Kaikki sujuu hyvin siihen asti, kun tiedot pitäisi esittää itse sivulla. Miten saan koodin valitsemaan tietyn hevosen taulun, kun taulun nimi on aina kil_[hevosen id].

Kaikkien hevosten kilpailut kannattaa tallentaa samaan tauluun, eikä tehdä jokaiselle hevoselle omaa taulua. Jos tietokannassa on 100 hevosta ja jokaisella on 300 kilpailua, tarkoittaa se vasta 300 00 rivistä kilpailutaulua. Vaikka luku tuntuu isolta, ei kyseessä ole vielä kovinkaan iso tietokanta, eli kaikki kilpailut voi hyvin laittaa samaan taluun.

merlin [07.03.2011 20:33:29]

#

No kaipa pitää koittaa sitten niin, noita kilpailuita kun harvemmin täytyy jälkikäteen edes mennä muuttelemaan millään tavalla - niin ehkä tuo iso määrä ei sitten haittaa kun ei joudu mitään kaivelemaankaan :D

Ilmeisesti pitää jokaiselle kisalle laittaa joku tunniste, kenen hevosen kisa se on?

Kiitos mielipiteistä, ehkä mie uskaltaudun noiden isojen taulujen maailmaan :D

makumaku [07.03.2011 20:36:19]

#

-tossu- kirjoitti:

Jos tietokannassa on 100 hevosta ja jokaisella on 300 kilpailua, tarkoittaa se vasta 300 00 rivistä kilpailutaulua.

Niin, tuo 300 000 ei ole vielä paljon mitään, ja tuossa esimerkissä niitä rivejä tulee vain vaivaiset 30 000.

merlin kirjoitti:

No kaipa pitää koittaa sitten niin, noita kilpailuita kun harvemmin täytyy jälkikäteen edes mennä muuttelemaan millään tavalla

Siis kilpailuille tulee oma taulu (se pari sataa riviä) jossa on kilpailujen tiedot kuten aika, paikka jne.., ja hevosten kilpailusuorituksille oma (parikymmentätuhatta riviä).

merlin kirjoitti:

Kiitos mielipiteistä, ehkä mie uskaltaudun noiden isojen taulujen maailmaan :D

Ei sinun tarvitse uskaltautua isojen taulujen maailmaan, koska tuossa ei tule isoja taulua, ainoastaan näitä pieniä parinkymmenentuhannen rivin tauluja.

Vastaus

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

Tietoa sivustosta