[PHP][MySQL] Drzewko - kategorie |
[PHP][MySQL] Drzewko - kategorie |
2.02.2015, 15:00:17
Post
#1
|
|
Grupa: Zarejestrowani Postów: 358 Pomógł: 0 Dołączył: 19.04.2012 Ostrzeżenie: (0%) |
Robię prosty sklep internetowy i zatrzymałem się na budowie bazy danych bo kurcze nie wiem za bardzo jak rozwiązać problem z kategoriami w sklepie.
Powiedzmy, że mam kilka kategorii:
Coś mniej więcej takiego. Więcej jak 3 poziomy nie powinno być. Teraz zastanawiam się czy takie rozwiązanie jest dobre: products_categories: cat_id | cat_parent | cat_name A w PHP zrobię sobie przy wyświetlaniu: - sprawdzanie czy w danej kategorii są podkategorie (mysql_num_rows za każdym razem) - jeśli są to pobiorę wszystkie kategorie o parent_cat = cat_id Czyli podsumowując do każdego poziomu drzewka zrobiłbym osobne pobieranie kategorii. Czytałem o tych drzewkach w PHP i MySQL i wyczytałem że ludzie mają właśnie z tym problem bo po stronie mysqla nie ma takiej sztuczki do tego. Wyczytałem też o left i right, ale strasznie te rozwiązanie mi się nie podoba (nie rozumiem go kompletnie). z góry dzięki za odp |
|
|
2.02.2015, 15:03:34
Post
#2
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%) |
Czytałem o tych drzewkach w PHP i MySQL i wyczytałem że ludzie mają właśnie z tym problem bo po stronie mysqla nie ma takiej sztuczki do tego. Wyczytałem też o left i right, ale strasznie te rozwiązanie mi się nie podoba (nie rozumiem go kompletnie). http://piotrekkr.info/2009/08/me-vs-tree-c...-w-mysql-i-php/ -------------------- Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta). |
|
|
2.02.2015, 15:08:37
Post
#3
|
|
Grupa: Zarejestrowani Postów: 655 Pomógł: 73 Dołączył: 2.05.2014 Ostrzeżenie: (0%) |
1. Jak często będziesz zmieniał te kategorie?
2. Jak dużo ich jest? Generalnie, na drzewach na których ja pracuje (gedmo tree najczęściej) jest to tak: id | parent | level | name | root Tak będzie najtwiej. Teraz tak:
W ten sposób możesz: - pobrać wszystkie liście (dzieci) danej kategorii (parent == ?) - sprawdzic czy dana kategoria jest kat. główna (parent == null) - pobrać tylko jedną kategorie główna z dziecmi (root == ?) - bardzo łątwo całość modyfikować Może nie napisałęm tego najczytelniej, ale tak to sie mniej więcej robi edit: to co podał !*!, to left - right system (tak ja to nazywam). Przydaje mi się gdy pracuje na drzewie z 1800 kategorii i 6 poziomami. Ten post edytował Forti 2.02.2015, 15:09:54 -------------------- Overwatch24 - najbardziej zaawansowany Polski portal Overwatch od fanów dla fanów.
Fachowo.co Behance.net/fachowo |
|
|
16.02.2015, 15:47:01
Post
#4
|
|
Grupa: Zarejestrowani Postów: 358 Pomógł: 0 Dołączył: 19.04.2012 Ostrzeżenie: (0%) |
Dobra w takim razie zrobię tak jak napisałeś bo tego systemu left-right nie ogarniam
Korzystam z twojego sposobu, ale mam problem z wyświetleniem produktów z wszystkich kategorii gdzie cat_root = 1 Wygląda to tak: 1. Telefony 1.1. Komórkowe 1.1.1. Używane I powiedzmy mam kilka rekordów w "Używane" i nie wiem jak wyświetlić że po wejściu w "Telefony" pokaże mi produkty ze wszystkich kategorii należących do głównej czyli "Telefony" bo przecież w tabeli z produktami zapisuje tylko jedną kategorie (w tym przypadku "używane"). I drugie pytanie, czy tworzenie nowego obiektu klasy w pętli (wyświetlanie danych z bazy) to grzech? Ten post edytował d.stp 16.02.2015, 15:47:32 |
|
|
16.02.2015, 17:36:47
Post
#5
|
|
Grupa: Zarejestrowani Postów: 655 Pomógł: 73 Dołączył: 2.05.2014 Ostrzeżenie: (0%) |
1. To proste. Pobierasz listę kategorii dzieci (wszystkie które root maja 1 lub wg. Patent itp.) i potem produkty dla tych kategorii. Służy do tego IN w zapytaniu mysql. Np.
Select * from products where category_id IN $tablica_z_ids Kombinuj, musisz zebrac sobie te id wszystkich kategorii. Np select id from category where car_root = 1 2. Jezeli ten obiekt to zapytanie do bazy to jest to grzech bardzo duży. -------------------- Overwatch24 - najbardziej zaawansowany Polski portal Overwatch od fanów dla fanów.
Fachowo.co Behance.net/fachowo |
|
|
16.02.2015, 18:04:07
Post
#6
|
|
Grupa: Zarejestrowani Postów: 358 Pomógł: 0 Dołączył: 19.04.2012 Ostrzeżenie: (0%) |
Coś takiego wykombinowałem:
Chyba działa dobrze, ale pokazuje mi 3 produkty (2 takie same) chociaż w bazie są tylko 2... Ten post edytował d.stp 16.02.2015, 18:04:26 |
|
|
16.02.2015, 20:04:49
Post
#7
|
|
Grupa: Zarejestrowani Postów: 655 Pomógł: 73 Dołączył: 2.05.2014 Ostrzeżenie: (0%) |
Złe zapytanie. Poczytaj w internecie o relacjach. Przykładów jest całą masa. Gotowca Ci nie dam, ponieważ nie mam i nie znam twojej bazy
-------------------- Overwatch24 - najbardziej zaawansowany Polski portal Overwatch od fanów dla fanów.
Fachowo.co Behance.net/fachowo |
|
|
16.02.2015, 21:07:20
Post
#8
|
|
Grupa: Zarejestrowani Postów: 358 Pomógł: 0 Dołączył: 19.04.2012 Ostrzeżenie: (0%) |
Kategorie:
cat_id | cat_parent_id | cat_level | cat_name | cat_root | cat_rewrite Produkty produkt_id | produkt_kat | produkt_name | product_x | product_y Po lewo mam menu i wyświetlam główne kategorie:
i dalej wyświetlam produkty. Jeśli nie ma $_GET z id kategorii to pokazuje ostatnio dodane produkty ze wszystkich kategorii. Jeśli user kliknie w kategorie to skrypt sprawdza czy są podkategorie, jeśli są to je wyświetla + pod podkategoriami pokazuje ostatnie XXX produktów z tej kategorii głównej (i tu jest właśnie problem). Ten post edytował d.stp 16.02.2015, 21:09:02 |
|
|
Wersja Lo-Fi | Aktualny czas: 13.05.2024 - 08:20 |