Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Dylematy z wydajnością
Vasquez21
post
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ć.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
dr_bonzo
post
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.
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 Aktualny czas: 19.08.2025 - 16:05