![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 27.09.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam, mam 2 połączone relacją tabele w bazie:
| id | imie | nazwisko | klub | | id | klub | trener | adres | powiązane poprzez klub. I tutaj mój problem: jak mam zapisywać, odczytywać, usuwać i modyfikować dane w bazie, tak aby te relacje były zachowane (np wprowadzając do bazy osobę za pomocą jednego formularza z tego samego klubu zeby nie dodawało klubu do tabeli nr 2 po raz drugi? lub jak pobrać odpowiadające sobie dane z obu tabel za pomocą jednego zapytania?)? Nie mam dostępu do zadnej literatury, a kursy w internecie nic nie mówią o InnoDB i są raczej w tym temacie ubogie. Dzieki za pomoc. Pozadrawiam |
|
|
![]()
Post
#2
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 590 Pomógł: 40 Dołączył: 11.01.2007 Skąd: Centrum Ostrzeżenie: (0%) ![]() ![]() |
To że jest to InnoDB to nic nie zmienia.
Pobieranie danych to po prostu wykonanie JOIN'a czyli :
Kolumny "klub" jakiego są typu ![]() Co do dodawania to dodajesz do tabeli pierwszej tabeli dane podając klub wybierajac go z listy, która została stworzona na podstawie danych z tabeli drugiej. -------------------- 404
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 675 Pomógł: 15 Dołączył: 7.11.2004 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Cytat Nie mam dostępu do zadnej literatury, a kursy w internecie nic nie mówią o InnoDB i są raczej w tym temacie ubogie Akurat w tej kwesti, nie ma wielkiej różnicy, czy używasz tabel InnoDB, czy też nie.Zapisywanie danych - do każdej tabeli osobno, przy czym nie możesz wstawić do tabeli klucza obcego, jeżeli w tabeli do której się on odwołuje, nie ma odpowiednika (czyli wstawiasz najpierw tam, gdzie jest klucz główny). Odczytywanie - za pomocą składni SELECT, z dodatkiem składni JOIN. Usuwanie - w zależności czy zadeklarowałeś ON DELETE, baza zrobi to za Ciebie, albo usuwasz ręcznie. Modyfikacja - j.w. (z tym, że ON UPDATE). [EDIT] do postu poniżej Niestety nie wiem jaki jest zamysł autora. Początkowo przyjąłem, że są tabele: klub i zawodnicy (mająca pole klub, będący kluczem obcym). Wtedy np. zmiana nazwy klubu aktualizowałaby dane. Ale autor chyba troszkę inaczej zaprojektował tę tabelę, więc zgodzę się z Twoją uwagą AxZx Ten post edytował JaRoPHP 16.01.2007, 22:50:52 -------------------- Kto pyta, nie błądzi...
Kto zbłądził, ten pyta... |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 1 385 Pomógł: 55 Dołączył: 1.03.2005 Skąd: śląsk Ostrzeżenie: (0%) ![]() ![]() |
a na czym polega modyfikacja zakladajac ze jest zadeklorowane ON UPDATE?
dla struktury ktora podal autor tematu. modyfikuje dane w pierwszej tabeli to co sie zmieni w drugiej? po co jest ON UPDATE? -------------------- aplikacje internetowe | Symfony
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 27.09.2006 Ostrzeżenie: (0%) ![]() ![]() |
JaRoPHP -> moj zamysl jest taki, ze mam baze zawodnikow i baze klubow. zawodnikow jest wielu, a klubow jest kilka, kazdy zawodnik nalezy do jakiegos klubu, z tabeli "kluby".
Teraz pojawil sie nastepny problem: zmienilem troszke tabele, teraz wyglada nastepująco: | id | imie | nazwisko | id_klub | - tabela zawodnicy | id_klub | klub | trener | adres | - tabela kluby id_klub w tabeli "kluby" jest auto_increment, i powiazanie jest poprzez to wlasnie pole. Z wyciąganiem danych z bazy nie ma problemu, jednakże mam problem z dodawaniem. Dodaję najpierw zapytaniem wpis do tabeli "kluby", i jak mam więc dodać dane do tabeli "zawodnicy" nie znając w chwili dodawania wartości id_klubu ? Mam wartosc tego pola sprawdzic wyszukując na podstawie nazwy klubu? dzieki za dpowiedz, pozdrawiam |
|
|
![]()
Post
#6
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 590 Pomógł: 40 Dołączył: 11.01.2007 Skąd: Centrum Ostrzeżenie: (0%) ![]() ![]() |
Skoro najpierw dodajesz wiersz do tabeli klub to potem możesz w php wyciągnąć stworzone id.
Zrobisz to za pomocą funkcji [u]mysql_insert_id()[/b] Mając id wstawionego klubu możesz wstawić je do tabeli z piłkarzami. -------------------- 404
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 27.09.2006 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję,
no i ostatnie nurtujące mnie pytanie: co zrobić, aby klub nie został dodany po raz drugi do bazy? chciałem zrobić pole "klub" jako UNIQUE, ale nie mogę, sql mi na to nie pozwala. pole to jest typu TEXT. a wywala komunikat taki: #1170 - BLOB/TEXT column 'klub' used in key specification without a key length Próbowałem ustawić długość na różne wartości, ale tez nie działa. |
|
|
![]()
Post
#8
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 590 Pomógł: 40 Dołączył: 11.01.2007 Skąd: Centrum Ostrzeżenie: (0%) ![]() ![]() |
Możesz sprawdzić w php. Podczas dodawania nowego klubu możesz wyciągnąć wszystkie kluby, które są aktualnie w bazie i porównać z nowo dodawanym wpisem.
Jeżeli znajdziesz pasujący wpis to nie dodajesz nowego klubu, jeżeli żaden wpis z bazy nie przypasuje dodasz nowy klub. -------------------- 404
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 1 385 Pomógł: 55 Dołączył: 1.03.2005 Skąd: śląsk Ostrzeżenie: (0%) ![]() ![]() |
aby sprawdzic czy dany klub jest w bazie mozesz zrobic tak:
jezeli wynik tego zapytania jest wiekszy od 0 tzn ze jest taki klub w bazie, jezeli nie ma to mozesz go dodac bo takiego jeszcze nie ma. -------------------- aplikacje internetowe | Symfony
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 590 Pomógł: 40 Dołączył: 11.01.2007 Skąd: Centrum Ostrzeżenie: (0%) ![]() ![]() |
Sposób AxZx jest stanowczo szybszy ... o tym nie pomyślałem.
-------------------- 404
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 27.09.2006 Ostrzeżenie: (0%) ![]() ![]() |
Już wiem wszystko co było mi potrzebne. Dziękuję za pomoc.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 6.07.2025 - 21:45 |