Zdravicko, potrebuji poradit ohledne prvku formulare <select multiple>
V databazi mam 2 provazane tabulky - autorech a dokumenty. V dokumentech bych chtel, aby byl u jednoho atributu uvedeno id_autora odkazujici na prislusnou polozku v autorech. Pokud je autor vzdy jen jeden, neni to problem. Nevim ale, jak docilit toho, aby v jednom sloupci tabulky (jednom atributu) bylo uvedeno vice (spolu)autoru. Napr. tedy autory dokumentu XXX jsou autori s id 1,2 a 10.
Pomoci <select multiple> jsem nacetl prislusne ID autoru do pole, ale nevim, jak je dale ulozit do DB, aby se pak daly co nejsnaze vytahnout. Jaky datovy typ napr zvolit. SmallInt asi nepujde,takze varchar?
Napadlo me sice reseni, ze bych jednotlive ID oddeloval specialnimi znaky (napr. & nebo #), pri vypisu pak nacetl cely retezec, postupne z nej ID separoval a nad kazdym spoustel dotaz pro zjisteni informaci o danem autorovi, ale zda se mi to prilis neprakticke. Jiste existuje nejake elegantnejsi reseni.
Predem dekuji za vsechny rady!
Broli
a právě o tom jsou relační databáze.
Návrh řešení:
máš tabulku autorů, např.:
ID_autor,jmeno_autora
obsah např.:
1,"Novák Josef"
2, "Peřina František"
3,"Chocholoušek Stanislav"
a pak vytvoříš tabulku dokumentů, např.:
ID_dokument, nazev_dokumentu,ID_autor
obsah např.:
1,"Blábol 1",1 //tj. autor = Novák Josef
2,"Blábol hromadný",1 //
2,"Blábol hromadný",2 // tzn. u jednoho díla máš uvedeny 3 autory
2,"Blábol hromadný",3 //
a pak jednoduše sestrojíš dotaz:
SELECT * FROM tab_dokumenty WHERE nazev_dokumentu="Blábol hromadný"
výsledek bude mít 3 řádky - v řádku 1 bude uveden autor č. 1 atd.
Ještě ten dotaz můžeš upřesnit spojením obou tabulek, ať ti vyjede rovnou jméno autora a ne jen jeho ID atd.
no dobre a udelat to ale tak, abych nemel vsechny ty radky duplicitni to nejde? to jest, aby pro jeden dokument byl jen jeden radek a v jednom sloupci byl odkaz na vsechny 3 autory? Tohle je sice taky reseni, ale myslim, ze by to slo udelat nejak lip...
No jo, to se potom můžeš vykašlat na relace, klidně si udělej sloupec "autor", jednotlivé autory si odděl nějakým nezaměnitelným znakem nebo řetězcem, díky kterému později "rozstříháš" řetězec na jednotlivé autory:
předpokládejme, že pomocí mysql dotazu SELECT jsi schopen ze sloupce autor vyčíst řetězec "Novák Jose§§§Peřina František§§§Chocholoušek Stanislav"
$autor = "Novák Jose§§§Peřina František§§§Chocholoušek Stanislav";
$oddelovac = "§§§";
$rozdeleny_autor = split ($oddelovac, $autor);
$rozdeleny_autor je pole, ve kterém máš uloženy 3 položky s jednotlivými autory.
Hotovo :))
Samozřejmě místo jmen autorů, tam můžeš mít jejich ID.
Osobně bych se klonil ale k mému prvotně uvedenému - relační řešení je skutečně nejoptimálnější - tedy obvykle :))