Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Wiązanie danych z różnych tabel
Forum PHP.pl > Forum > Przedszkole
-anonymous-
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.
CuteOne
1. Filmy zazwyczaj mają więcej niż jedną kategorię - dodaj tabele łączącą kategorie z filmem
2. To samo z filmem i zdjęciami

-anonymous-


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


CuteOne
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


-anonymous-
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?
-anonymous-
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
klocu
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.
-anonymous-
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?
klocu
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
-anonymous-
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)
CuteOne
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
-anonymous-
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.
abort
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.
erix
Google: CRUD i scaffold.

Szczerze mówiąc, takich rzeczy od zera się już za często nie robi...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.