![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 127 Pomógł: 3 Dołączył: 22.04.2012 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Cześć, męczę się i męczę i sam chyba już nie wymęczę...
posiadam dwie tabele: categories: id category id_parent (tabela ta tworzy mi drzewo kategorii) ------------------------ 1 główna 0 2 główna_inna 0 3 podkategoria 1 4 podpodkategoria 1 products: id id_cat title text (gdzie id_cat = id tabeli categories) 1 3 produkt opis 2 3 produkt opis 3 4 produkt opis bez problemu sobie pobieram produkty dla konkretnego id z tabeli kategorii (mam zmienną id=3 (3 to numer kategorii) za pomocą której zasysam dane z produktów (produkty przypisane do kategorii, które mają id_cat=3). problem się zaczyna gdy chcę wyświetlić główną kategorię np dostaję dane $id=1 i do niej nie ma żadnych produktów przypisanych ale są przypisane do podkategorii, które należą do id=1. da się to teraz jakoś sklecić sql aby mi wypluł takie dane? czyli produkty dla numeru id, który otrzymujemy np. id=1 oraz jeśli istnieje przypisany numer id_parent to również produkty przypisane do niego. coś takiego zacząłem robić ale niestety - danych jest za dużo powielonych... coś tam idę w dobrym kierunku ale potrzebuje pomocy ![]()
-------------------- Prywatny blog -> cupial.com.pl
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 127 Pomógł: 3 Dołączył: 22.04.2012 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
dzięki wielkie - taka pomoc mnie motywuje do nauki SQLa
![]() w tej chwili fajnie mi pokazuje produkty przy wyborze kategorii matki, wszystkie produkty, które są przypisane do dzieci. Jednak nie pokazuje mi już produktów, które są przypisane do dzieci i jeszcze ich dzieci... patrząc na możliwość ustanawiania dowolnie "głębokich" kategorii, którą stworzyłem, zastanawiam się czy nie skopałem bazy na samym początku, czyli błędnie stworzone tabele - chyba, że uratuje mnie sql i można to jakoś rozwiązać... co o tym myślicie? i czy ew. można było lepiej to zrobić? mysql> show tables; +--------------------+ | Tables_in_xxxx | +--------------------+ | admins | | categories | | photos | | products | +--------------------+ mysql> select * from categories; +----+----------------------------------------+-----------+ | id | category | id_parent | +----+----------------------------------------+-----------+ | 1 | Ochrona r?k | 0 | | 2 | Ochrona cia?a | 0 | | 3 | Ochrona przed upadkiem z wysoko?ci | 0 | | 4 | Ochrona g?owy | 0 | | 5 | Ochrona s?uchu | 0 | | 6 | Ochrona oczu i twarzy | 0 | | 7 | Ochrona dr?g oddechowych | 0 | | 8 | Ochrona n?g | 0 | | 9 | Higiena i czysto?? | 0 | | 10 | Wyposa?enie zak?ad?w / narz?dzia gertu | 0 | | 11 | Ochrona PPO? | 0 | | 12 | Pozosta?e artyku?y | 0 | | 31 | podkategoria testowa | 1 | +----+----------------------------------------+-----------+ mysql> select * from products; +----+--------+-------------------+---------------------------------+ | id | id_cat | title | text | +----+--------+-------------------+---------------------------------+ | 39 | 31 | PRODUKT TESTOWY | Opis produktu testowego | | 40 | 31 | PRODUKT TESTOWY 2 | Opis do produktu testowego nr 2 | +----+--------+-------------------+---------------------------------+ mysql> select * from photos; +----+------------+----------------------------------+ | id | id_product | path | +----+------------+----------------------------------+ | 40 | 39 | uploads/rekawice2_1342264999.jpg | | 42 | 39 | uploads/rekawice1_1342265507.jpg | +----+------------+----------------------------------+ -------------------- Prywatny blog -> cupial.com.pl
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 709 Pomógł: 176 Dołączył: 24.10.2010 Ostrzeżenie: (0%) ![]() ![]() |
Struktura tylko z polem parent_id jest najprostsza (najczęściej spotykana) lecz chyba najmniej optymalna. Temat drzewek kategorii jest w sumie bardzo rozległy istnieje sporo metod na rozwiązanie tego problemu. Jeden z ciekawszych wpisów na ten temat jaki czytałem:
http://blog.mwojcik.pl/2008/02/17/drzewa-k...-php-metoda-ip/ traktuje on o metodzie IP masz też podane w przykładach najczęściej spotykane operacje na takim drzewie. -------------------- http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 127 Pomógł: 3 Dołączył: 22.04.2012 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
ok zagłębiłem się w te kategorie i nie znalazłem niczego, czego bym nie wiedział
![]() w dalszym ciągu nie wiem jak wyświetlić produkty zaznaczonych kategorii, gdy otrzymuje dane wejściowe dla rodzica... w tej chwili zapytanie pokazuje mi produkty przypisane do rodzica i pierwszego dziecka - nie zagłębia się dalej. rodzic->dziecko1->dziecko2->dziecko3 -> dziecko4 ->dziecko5 -> dziecko zapytanie, które dał mi @mmmmmmm jest dobre, jednak brakuje tutaj wejścia głębiej w podkategorie, nie wiem czy da się to z automatu jakoś sprawdzić i wejść głębiej. rozumiecie mnie ;d ? -------------------- Prywatny blog -> cupial.com.pl
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Nie pisałeś, że masz 'głębszą' strukturę. Dlatego moje zapytanie ograniczylo się do jedneog poziomu ( i podpoziomów). To, czego szukasz nie zrobisz inaczej niż rekurencją (bardzo niewydajną w bazach danych)
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 127 Pomógł: 3 Dołączył: 22.04.2012 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Czyli samym SQLem jest raczej niewykonalne?
Ok, w takim razie zrobię to rekurencją... Chociaż też wolałem tego unikać:/ -------------------- Prywatny blog -> cupial.com.pl
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Można SQL (moje zdanie jest take, że SQL-em wszystko można), ale szkoda czasu...
Chociaz możesz sobie pomóc... Potrzebujesz tylko w tabeli dodatkowe pole, które w jakiś magiczny sposób będzie przechowywać CAŁĄ ścieżkę: 1 root 2 podkatalog 1 3 podkatalog2 1 4 podkatalog glebiej 1\2 5 jeszcze gflebiej 1\2\4 itd... chyba już wiesz, do czego zmierzam? |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 279 Pomógł: 60 Dołączył: 25.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
csharp, możesz zrobić jak napisał mmmmmm, ewentualnie użyć modelu nested set albo closure table. Wszystkie te rozwiązania lepiej się nadają do pobierania drzewiastych danych, niż użyty przez Ciebie sposób.
-------------------- there is much to be learned
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 19:18 |