dynamiczne tworzenie nowych pol (tabela msql)

Języki, których efekty są wykonywane po stronie serwera. PHP, ASP czy CGI w połączeniu z bazami danych SQL dają niezwykłe możliwości budowy i zarządzania stron WWW. Tu zadajemy pytania oraz demonstrujemy kod, z którym mamy problem.
jaycop
Nowy
Nowy
Posty: 53
Rejestracja: sob lip 23, 2005 11:35 am

dynamiczne tworzenie nowych pol (tabela msql)

Post autor: jaycop »

Tradycyjnie rozwiazanie rozwiazanie to stworzenie tabelki dla bazy sql o 6 polach (dziedziny)

id | tydzien | pilka | hokej | koszykowka | tenis | box
--------------------------------------------------------------


ale takie rozwiazanie jest dobre gdy wiemy z gory ile dziedzin sportowych (pol) jest wymagane.

Teraz nie wiem jak rozwiazac to aby uzytkownik mogl dodawac nowy wiersz z wynikami oraz dodawac nieograniczona ilosc dziedzin (pol) ,kasowac.

Myslalem nad rozwiazaniem takim ze stworzyc w zapasie np 1000 pol w tabeli (domyslna max wartosc),
lecz co zrobic z nazwami tych pol.
Cotter
Nowy
Nowy
Posty: 69
Rejestracja: pn lut 06, 2006 3:11 pm

Re: dynamiczne tworzenie nowych pol (tabela msql)

Post autor: Cotter »

Nie rozumiem o co dokładnie ci chodzi, ale wiem że twoje podejście jest zupełnie błędne. Takich baz się po prostu nie robi. Powiedz co chcesz przez to uzyskać to może będę w stanie ci pomóc
koziolek
Przelotem
Przelotem
Posty: 387
Rejestracja: sob paź 21, 2006 10:07 pm
Kontakt:

Re: dynamiczne tworzenie nowych pol (tabela msql)

Post autor: koziolek »

rozbij całość na dwa...
pierwsza tabela:
id | nazwa dziedziny sportu
------------------------------------

druga tabela:
id | id_dziedziny | tydzien | wyniki
------------------------------------------

W pierwszej tabeli trzymasz tylko nazwydziedzin w drugiej wynik jest powiązany z dziedziną jak many-to-one (jedna dziedzina może mieć wiele wyników jeden wyniok może mieć jedną dziedzinę).
Bardzo eleganckie i wydajne rozwiazanie...
koziolek
Przelotem
Przelotem
Posty: 387
Rejestracja: sob paź 21, 2006 10:07 pm
Kontakt:

Re: dynamiczne tworzenie nowych pol (tabela msql)

Post autor: koziolek »

@the_foe rzeczywiście fajna sprawa, szczególnie pierwszy link jest niezły...
jaycop
Nowy
Nowy
Posty: 53
Rejestracja: sob lip 23, 2005 11:35 am

Re: dynamiczne tworzenie nowych pol (tabela msql)

Post autor: jaycop »

blahhhh no dzieki chlopy za to co wyzej ale chyba jednak zle zrozumiani mnie , sprostuje ponizej i troche jasniej

ok mam dwie tabelki

tab 1 (odpowiedzialna za nazwy dziedzin, uzytkownik moze dodawac.):

id | Nazwa_dziedziny |
----------------------------
1 | box
---------------------------
2 | tenis ziemny
---------------------------
itp. jakie tylko beda potrzebne uzytkownikowi.

tab 2 ( odpowiedzialna za przechowywanie wynikow)

id | autor | data_dodania | id_nazwy_dziedziny | wynik
----------------------------------------------------------------

ok i sprawa wyglada w ten sposob. Uzytkownik dodaje wpierw nowe nazwy dziedzin ( o ile sa potrzebne),
ostatnim krokiem jest dodanie nowych wynikow w tab2.
Wybiera (selectem) nazwe dziedziny ktorej id wstawiany jest w tab 2 (id_nazwy_dziedziny) i wprowadza wynik. Wszystko fajnie pieknie tylko jak do cholery ma to zatrybic gdy przy dodawaniu nowych wynikow chcem wprowadzic wyniki nie z jednej dziedziny tylko z kilku np, box, tenis ziemny, siatka i inne ?
Oczywiscie wszystko w jednym wierszu tab 2
koziolek
Przelotem
Przelotem
Posty: 387
Rejestracja: sob paź 21, 2006 10:07 pm
Kontakt:

Re: dynamiczne tworzenie nowych pol (tabela msql)

Post autor: koziolek »

tu jest wrzód... bo musisz stworzyć np. xmla który będzie dobrze definiował wynik. Sztuczka polega na tym iż w tabeli 2 trzymasz wyniki z danej dziedziny dla danej daty w jednej komórce...
Jako że różne dziedziny mają różny sposób zapisu wyniku trzeba znaleźć możliwość spójnego trzymania tych danych.
[xml]
<wyniki>
<wynik>
<kto gospodarz="nazwa" gosc="nazwa">
<gospodarz>wartosc</gospodarz>
<gosc>wartosc</gosc>
<rundy>
<runda>
<gospodarz>wartosc</gospodarz>
<gosc>wartosc</gosc>
</runda>
<runda>
...
</runda>
</rundy>
</wynik>
<wynik>
...
</wynik>
...
</wyniki>
[/xml]

Teraz załużmy że chcesz mieć wyniki z np. siadkówki to w tagu
<kto/> jako atrybuty podajesz gospodarza i gościa
<gospodarz/> i <gosc/> podajesz wynik końcowy
<runda/> odpowiada w tym przypadku za set

w innych przypadkach trzeba tylko rozróżniać za co odpowiada tag <runda/> w tenisie będą to sety, w boksie rundy, w kopanej wynik do przerwy itd.

Rozwiązanie ie jest optymalne, ale można je przepisać na bazę danych. Nie ukrywam iż roziwązanie to jest dość skomplikowane (musimy poradzić sobie z np. różnymi sposobami punktacji)i zazwyczaj nie jest darmowe...

Podsunąłem pewną idee mam nadzieję iż spełni ona oczekiwania...

Pozdrawiam
jaycop
Nowy
Nowy
Posty: 53
Rejestracja: sob lip 23, 2005 11:35 am

Re: dynamiczne tworzenie nowych pol (tabela msql)

Post autor: jaycop »

ok dzieki koziolek... jest to sposob,

ale w moim przypadku odpada, rozne typy danych formaty itp.
Musze miec osobne pole. Nie moze byc tak ze tylko xml i koniec kropka dupka srubka. :(
koziolek
Przelotem
Przelotem
Posty: 387
Rejestracja: sob paź 21, 2006 10:07 pm
Kontakt:

Re: dynamiczne tworzenie nowych pol (tabela msql)

Post autor: koziolek »

definiuj zatem pola w bazie:
opis pola
id_pola| id_dyscypliny |
--------------------------------
okreslając dyscyplinę przyporządkowujesz jej typy pól następnie definiujesz same pola pól
id_pola_Pola|id_pola_rodzica|nazwa|wartoscktora zawiera
---------------------------------------------------------------------------------,

I tak dalej aż osiągniesz zadowalający efekt :) Oczywiście sqlka która będzie wybierać wartości dla danej dyscypliny dość szybko urośnie do kilkunastu linii... niestety...

swoją drogą funkcjonalność której oczekujesz jest zazwyczaj "tajną" technologią każdej firmy. Mechanizm tzw. Custom Fields jest bardzo trudny i dość kosztowny zarówno ekonomicznie jak i wydajnościowo...

Pozdrawiam
gustaww
Posty: 9
Rejestracja: czw lis 09, 2006 8:53 pm
Kontakt:

Re: dynamiczne tworzenie nowych pol (tabela msql)

Post autor: gustaww »

Wiem że to może nie jest genialna porada, ale zaoszczędzi Ci duużo czasu: chcesz programować w MySQL - przeczytaj najpierw książkę o tym. Naprawdę.
ODPOWIEDZ