Autor Zpráva
strygomil
Profil *
Nazdar...

Robim do skoly nieco ako testovaci system v PHP & MYSQL, v skratke to funguje asi tak ze uzivatel sa po prihlaseni moze testovat z vybranej oblasti, napr. ma na vyber elektroniku, klikne a zobrazi sa mu test s otazkami a odpovedami je to riesene ako formulare s radio buttonmi, test sa po skonceni automaticky vyhodnocuje.....admin zas moze jednotlive testy tvorit, moze editovat otazky a odpovede......Momentalne to pracuje s dvoma databazami v prvej su dve tabulky jedna admins druha users v ktorej su jednotlive nicky a hesla v druhej databaze su samotne testy, kazdy test ma svoju tabulku s troma poliami:

Tabulka Ethernet:

Otazka Odpoved Spravna
Aka je specifikacia Ethernetu? 802.3 1
Aka je specifikacia Ethernetu? 802.11d 0

Teda user si moze vybrat Ethernet a program mu vygeneruje test ze zoberie otazku a vedla toho da rozne mozne odpovede a po odoslani porovnava ci bola oznacena spravna otazka podla stlpca "Spravna"
A tu sa dostavam ku svojmu problemu, totizto tato struktura databazy je dost jednoducha na prehlad ale na druhej strane dost nehospodarna....to ze kazda odpoved musi mat vedla seba otazku a to ze sa pri kazdom novom teste musi vytvorit nova tabulka.......predstavujem si to tak ze v jednej tabulke by boli uplne vsetky otazky v druhej uplne vsetky odpovede, kazda otazka by prisluchala testu a kazda odpoved otazke, zial nic takto zlozite som nikdy nerobil, takze ak ste pochopili moj problem, budem velmi vdacny ak mi s tym pomozete....
Joker
Profil
No, hlavní problémy jsou řečené přímo v dotazu: každý test má svou vlastní tabulku a zbytečně se opakují data (otázka se opakuje u každé odpovědi). Například v případě úpravy znění otázky se musí upravovat řádky se všemi odpověďmi, v nejhorším případě mohou vzniknout nekonzistentní data

Když zkusím něco navrhnout:
Tabulka otazky:
id_ot, otazka (, pocet_bodu,...)

Tabulka odpovedi:
id_odp, id_ot, odpoved, spravna

Tabulka testy:
id_test, id_ot

Sloupce otazka a odpoved jsou řetězce (nejspíš VARCHAR), všechny id_něco jsou čísla a spravna bych dal TINYINT(1)

A tehle dotaz:
SELECT otazka, odpoved, spravna FROM testy t JOIN otazky ot ON t.id_od=ot.id_ot JOIN odpovedi odp ON ot.id_ot=odp.id_odp WHERE t.id_test=$id_testu

z toho pak vyrobí tutéž strukturu, jako je ta současná (pro jeden daný test) :-)

Pokud by tatáž otázka nemohla být ve dvou různých testech, šlo by zrušit tabulku testy a sloupec id_test přesunout do tabulky otazky.
strygomil
Profil *
Joker: diky moc podobne som si to predstavoval, ale ten dopyt si neviem prelozit takze ak by si bol taky dobry skus mi prosim ta vysvetlit co sa s tymi datami deje a ako sa spoja, s JOIN som este nerobil....vopred diky
Toto téma je uzamčeno. Odpověď nelze zaslat.

0