Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Wiązanie danych z różnych tabel
--anonymous--
post 13.08.2012, 12:30:39
Post #1





Goście







Witam,
posiadam taką mniej więcej bazę danych


Nie wiem czy jest dobrze zaprojektowana (w razie czego proszę o uwagi).
Chcę zrobić mechanizm dodawania filmu i tu pojawia się problem, bo potrafię to zrobić przesyłając oddzielnie do każdej tabeli, ale jak zrobić żeby na jednej stronie można było dodać zdjęcie do filmu, wybrać kategorię i uzupełnić dane o filmie (i wszystko zostało odpowiednio powiązane). Wiem, że są klucze, ale nie wiem w jaki sposób powiązać je podczas dodawania. Przewiduję, że wyświetlanie takich danych będzie już po odpowiednim dodaniu i powiązaniu rzeczą prostszą.
Proszę o wskazówki. Nie chodzi mi tu o napisanie skryptu, tylko wskazówki dotyczące zapytań MySQL, jak one powinny się wiązać itp.
Go to the top of the page
+Quote Post
CuteOne
post 13.08.2012, 12:45:20
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


1. Filmy zazwyczaj mają więcej niż jedną kategorię - dodaj tabele łączącą kategorie z filmem
2. To samo z filmem i zdjęciami

Go to the top of the page
+Quote Post
--anonymous--
post 13.08.2012, 13:38:27
Post #3





Goście









Teraz tak to wygląda (chociaż i tak nie rozumiem po co te tabele, skoro były odpowiednie klucze wiążace).

Chcę stworzyć stronę gdzie dodaje się film. Jest to formularz, gdzie wypełnia się:

- tytuł:
- kategoria: (np. lista rozwijana)
- zdjęcie:
-- źródło:
-- tytuł:

Jak sformułować zapytania SQL, aby te dane się powiązały?

Pozdrawiam


Go to the top of the page
+Quote Post
CuteOne
post 13.08.2012, 14:17:04
Post #4





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


Po to aby jeden film mógł posiadać więcej niż jedną kategorię np. dramat/fabularny/s-f

  1. SELECT *
  2. FROM
  3. filmy f
  4. LEFT JOIN film_category fc ON (fc.id_film = f.id_film)
  5. LEFT JOIN category c ON (c.id_category = fc.id_category)
  6. WHERE
  7. f.id_film = 11


Go to the top of the page
+Quote Post
--anonymous--
post 13.08.2012, 14:55:23
Post #5





Goście







Dzięki, to mi dużo pomaga, lecz chodziło mi bardziej o dodanie tych danych na jednej stronie (a nie wyświetlenie). Mianowicie zastanawia mnie to że, numer pola w tabeli, który jest identyfikatorem - tworzony jest przez MySQL? - To czy da się dodać to wszystko na jednej stronie (może id da się ustawić na sztywno)? - czyli jak powinny wyglądać INSERTy?
Go to the top of the page
+Quote Post
--anonymous--
post 13.08.2012, 15:00:33
Post #6





Goście







Wymyśliłem, że można przy wcześniejszym rządaniu pobrać z bazy numer najwiekszego ID i go powiekszyć o 1. Ale co w sytuacji, jak ktoś w czasie w którym ja bede edytował - doda nowy film?

ps. Jestem anonimowy więc nie moge edytować - sorki za post pod postem
Go to the top of the page
+Quote Post
klocu
post 13.08.2012, 15:57:13
Post #7





Grupa: Zarejestrowani
Postów: 291
Pomógł: 45
Dołączył: 21.08.2007

Ostrzeżenie: (0%)
-----


Rejestracja nie boli, a ułatwia życie.

Cytat
pobrać z bazy numer najwiekszego ID i go powiekszyć o 1. Ale co w sytuacji, jak ktoś w czasie w którym ja bede edytował - doda nowy film?

Tak się do tego nawet nie zabieraj - po to jest autoinkrementacja wartości pół żeby ją stosować.

Ja twoja strukturę ograniczyłbym do:
- tabela film
- tabela kategoria filmu

Dodatkowo doszłoby do tego:
- tabelka powiązań film <-> kategoria, ale nie opierał jej na 2 tylko polach tylko dodał 3 z indeksem (autoinkrementowalnym)

Co do tabelki film <-> zdjęcie - jak dla mnie zbędna. Bo owszem film może mieć wiele zdjęć, ale raczej zdjęcie jest dopasowane do konkretnego filmu.
Czyli wystarczy pole klucza obcego w tabelce ze zdjęciami tak jak miałeś w pierwotnej formie.
Go to the top of the page
+Quote Post
--anonymous--
post 13.08.2012, 16:11:05
Post #8





Goście







Ok, teraz wygląda to tak:


Tylko nadal nie wiem w jaki sposób zrealizować mój główny cel.

Cytat
Chcę zrobić mechanizm dodawania filmu i tu pojawia się problem, bo potrafię to zrobić przesyłając oddzielnie do każdej tabeli, ale jak zrobić żeby na jednej stronie można było dodać zdjęcie do filmu, wybrać kategorię i uzupełnić dane o filmie (i wszystko zostało odpowiednio powiązane). Wiem, że są klucze, ale nie wiem w jaki sposób powiązać je podczas dodawania.


Czyli to będą 4 INSERTy, ale skąd mam wiedzieć, jakie będzie ID?
Go to the top of the page
+Quote Post
klocu
post 13.08.2012, 16:42:13
Post #9





Grupa: Zarejestrowani
Postów: 291
Pomógł: 45
Dołączył: 21.08.2007

Ostrzeżenie: (0%)
-----


Najpierw musisz mieć wprowadzone kategorie.
Dodając film takim formularzem będziesz mógł dodać film (id kategorii np. dodasz do select'a)
Zdjęcie będziesz mógł dodać niemal jednocześnie z filmem - najpierw doda się rekord filmu, pobierzesz mysql_last_id() i dodasz zdjęcie po uprzednim uploadzie na serwer.
(hierarchia - krok po kroczku)

Wszystko da się zrobić - zależnie od układu tabelek.

--
A jak zrealizować?
frontend: HTML + CSS + FORM
backend: php + mysql

Ten post edytował klocu 13.08.2012, 16:43:05
Go to the top of the page
+Quote Post
--anonymous--
post 13.08.2012, 17:24:04
Post #10





Goście







Będzie takie coś działało wysyłając zapytania w jednym żądaniu?

-- INSERT na film
---- wpisane title

-- INSERT na film_has_category
---- pobranie film_idFilm z mysql_insert_id() (bo o tym mysql_last_id() nie ma nic w necie)
---- pobranie category_idCategory z formularza

-- INSERT na photo
---- wpisane title, source
---- pobranie film_idFilm ze zmiennej (wczesniej juz pobrane)
Go to the top of the page
+Quote Post
CuteOne
post 13.08.2012, 17:32:17
Post #11





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


Zamiast pytać nas czy coś zadziała sprawdź smile.gif jak coś się nie uda wtedy wpadnij zapytać co poprawić - z chęcią pomożemy
Go to the top of the page
+Quote Post
--anonymous--
post 13.08.2012, 17:44:25
Post #12





Goście







Ale dlaczego mam nie pytać przed?
Nie mam żadnego doświadczenia w tworzeniu w PHP, więc najpierw chciałbym się dowiedzieć - jak zaprojektować bazę i jak to będzie wszystko wyglądało. Mam napisać 50 lini kodu, które potem jak się okaże, pójdą w niepamięć bo były bez sensu - to jest bez sensu.

Jak ktoś programuje w PHP, to spojrzenie na takie coś
Cytat
-- INSERT na film
---- wpisane title

-- INSERT na film_has_category
---- pobranie film_idFilm z mysql_insert_id() (bo o tym mysql_last_id() nie ma nic w necie)
---- pobranie category_idCategory z formularza

-- INSERT na photo
---- wpisane title, source
---- pobranie film_idFilm ze zmiennej (wczesniej juz pobrane)


i powiedzenie, czy to ma jakiś sens to chyba rzecz prosta (kilkadziesiąt sekund)..
Dla mnie, który nie wiąże swojej przyszłości z PHP, napisanie tego i sprawdzenie czy działa to długiiii czas. smile.gif

Dziękuję za pomoc.
Go to the top of the page
+Quote Post
abort
post 13.08.2012, 18:03:04
Post #13





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

Ostrzeżenie: (0%)
-----


Cytat(-anonymous- @ 13.08.2012, 18:44:25 ) *
Ale dlaczego mam nie pytać przed?
Nie mam żadnego doświadczenia w tworzeniu w PHP, więc najpierw chciałbym się dowiedzieć - jak zaprojektować bazę i jak to będzie wszystko wyglądało. Mam napisać 50 lini kodu, które potem jak się okaże, pójdą w niepamięć bo były bez sensu - to jest bez sensu.

Nie, to nie działa tak, że na forum powiedzą Ci "co i jak", a Ty tylko posklejasz kod.
To działa w ten sposób, że na forum ludze mogą pomóc nakierować na właściwe tory (np. pomogą dobrać strukturę bazy, pomogą poprawić zapytanie), ale kod piszesz Ty - i zaręczam Ci, że na własnych błędach człowiek uczy się najlepiej. Nawet jeśli programowanie dla niego to tylko hobby czy zrobienie jednej konkretnej rzeczy.

P.S.
Też nie piszę w PHP dla pieniędzy, ale dla poszerzania horyzontów i ogólnie mówiąc, dla siebie.
Go to the top of the page
+Quote Post
erix
post 14.08.2012, 10:16:21
Post #14





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Google: CRUD i scaffold.

Szczerze mówiąc, takich rzeczy od zera się już za często nie robi...


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
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: 20.07.2025 - 04:23