![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 213 Pomógł: 0 Dołączył: 2.11.2004 Skąd: Jaworzno Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Mam pytanie co do rozplanowania bazy danych w sklepie. Mam wątpliwości co do rozwiązania które wymyśliłem tak więc chciałbym spytać o radę. Załóżmy że mam 3 tabele. - produkty (zawiera oczywiście produkty) - kategorie (zawiera oczywiście kategorie) - pro_kat (łączy obie tabele, tak by do kilku kategorii można było przypasować jeden produkt) Wymyśliłem sobie, że będę przechowywał w "pro_kat", wyłącznie wpisy wtedy kiedy dany produkt należy do jakiejs kategorii. Nie chciałem mieć sytuacji, że dodaję jakis produkt i mam np. 100 kategorii to nagle pojawia mi sie w tabeli łączącej pro_kat, 100 wpisów z informacją że dany produkt należy lub nie należy (1/0) do danej kategorii. Później jednak w panelu chciałem sobie zrobić coś takiego, że jak wybieram dany produkt to mogę edytować jego kategorie, otwiera mi się nowe okno, ładowane są wszystkie kategorie z bazy danych i zależnie od uprawnień pojawiają się butony "radio" z zaznaczonym tak lub nie. Jedyne co mi przyszło do głowy wtedy to puścić wtedy jedną pętlę która będzie jechała po wszystkich kategoriach i drugą która za każdym razem wysyła zapytanie do BD, czy dany wpis tam jest. Tak sobie pomyślałem jednak że to będzie bardzo dużo zapytań. Dodatkowo po zaznaczeniu i wybraniu nowych kategorii znów mam dwie możliwości: albo najpierw wszystkie należące do danego wpisy usunąć i później zrobić inserty, albo sprawdzać czy dany wpis już istnieje i jeśli tak to UPDATE, jeśli nie to insert... Wydaje mi się że pierwsze rozwiązanie jest jednak dużo szybsze. Oczywiście gdybym przechowywał wszystkie wpisy w pro_kat, to zrobiłbym poprostu update wszystkich pól. Bardzo proszę o jakieś sugestie i ewentualne uwagi który kierunek powinnienem wybrać. |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
1. To sie da jednym SQLem zrobic (wybrac kategorie nieprzypisane do produktu przy relacji wiele do wielu), do tego UNION z juz przypisanymi kategoriami, jakis znacznik okreslajacy czy kategoria jest przypisana i do petli wypisujacej:
Ten sql (tylko nieprzypisane): Cytat SELECT permissions.* FROM permissions WHERE NOT EXISTS ( SELECT * FROM employee_groups_permissions egp WHERE egp.permission_id = permissions.id AND egp.employee_group_id = $ID_grupy ) ORDER BY permissions.name ASC masz permissions i grupy zwiazane relacja wiele do wielu (tabela employee_groups_permissions) 2. Cytat Dodatkowo po zaznaczeniu i wybraniu nowych kategorii znów mam dwie możliwości: albo najpierw wszystkie należące do danego wpisy usunąć i później zrobić inserty, i wrzuc to w transakcje. Mozesz tez zalozyc UNIQUE index na (produkt_id, kategoria_id) tak ze nie pozwoli ci dodac przypisania kategorii ponownie. -------------------- Nie lubię jednorożców.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 16:05 |