Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mysql] praca na powiązanych tabelach, InnoDB
sauron9
post 16.01.2007, 21:24:07
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
Go to the top of the page
+Quote Post
Cienki1980
post 16.01.2007, 21:51:19
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 :
  1. SELECT * FROM table1 LEFT JOIN table2 ON table1.klub=table2.klub


Kolumny "klub" jakiego są typu questionmark.gif Ja bym relacje zrobił po id tabeli drugiej wpisywanej do tabeli pierwszej.

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
Go to the top of the page
+Quote Post
JaRoPHP
post 16.01.2007, 21:59:52
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...
Go to the top of the page
+Quote Post
AxZx
post 16.01.2007, 22:31:25
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
Go to the top of the page
+Quote Post
sauron9
post 17.01.2007, 20:17:26
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
Go to the top of the page
+Quote Post
Cienki1980
post 17.01.2007, 20:28:18
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
Go to the top of the page
+Quote Post
sauron9
post 17.01.2007, 20:43:45
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.
Go to the top of the page
+Quote Post
Cienki1980
post 17.01.2007, 20:55:02
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
Go to the top of the page
+Quote Post
AxZx
post 17.01.2007, 21:30:39
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:

  1. SELECT count(*) AS ile FROM kluby WHERE nazwa = $nazwa


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
Go to the top of the page
+Quote Post
Cienki1980
post 17.01.2007, 21:38:08
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
Go to the top of the page
+Quote Post
sauron9
post 17.01.2007, 21:38:14
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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 6.07.2025 - 21:45