![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 1 Dołączył: 6.12.2016 Ostrzeżenie: (0%) ![]() ![]() |
Witam jestem tu nowy i dopiero zaczynam swoją przygodę z PHP, HTML ogarniam już chyba całkiem dobrze więc pora wejść na wyższy poziom i pomyśleć o PHP/MySQL
Mam przykładową bazę ze strukturą tabel
Jak powinno wyglądać zapytanie abym mógł wyciągnąć z tabeli produktów wszystkie produkty z kategorii "AGD" i podkategorii dla których id rodzica to id kategorii "AGD"? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 220 Pomógł: 18 Dołączył: 5.02.2016 Skąd: Polska Ostrzeżenie: (0%) ![]() ![]() |
Nie lepiej zrobić jedną tabelę? Później będziesz za dużo miał mieszania wśród tabel. produkty: id | kategoria | ewentualna podkategoria | nazwa produktu Później tylko wyciągasz dane z tabeli "produkty":
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 1 Dołączył: 6.12.2016 Ostrzeżenie: (0%) ![]() ![]() |
Rozumiem że myślisz o wrzuceniu kategorii i podkategorii do tabeli produkty? Pewnie by było to i dobre rozwiązanie gdyby nie fakt że 1 produkt może należeć do wielu kategorii...
to może inaczej jest taka struktura menu kategorii:
przeglądając zawartość kategorii "Produkty RTV AGD" potrzebuje wyjąć wszystkie produkty co są w kategoriach "głebiej" i w tej "Produkty RTV AGD" czyli razem 10 produktów, jak powinno wyglądać zaputanie które zwróci mi tablicę z tymi produktami? Ten post edytował arturpiotrowski 6.12.2016, 18:48:04 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 270 Pomógł: 184 Dołączył: 7.10.2012 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Sprobuj to:
pisane z telefonu moga byc jakies bledy. Natomiast jesli chcesz zrobić to rekursywnie to musisz uzyc raczej PHP i MySQL do tego. Ten post edytował rad11 6.12.2016, 18:56:23 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 1 Dołączył: 6.12.2016 Ostrzeżenie: (0%) ![]() ![]() |
Czy to co dopisałem wymaga aby zrobić to rekursywnie?
Jeśli tak to czy mogę prosić o podpowiedz jak to rozwiązać rekursywnie? |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 270 Pomógł: 184 Dołączył: 7.10.2012 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Tak do tego będziesz musiał użyć funkcji rekursywnej zdanie klucz do google to "php mysql recursive categories"
|
|
|
![]()
Post
#7
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Zacznij od przygotowania poprawnej struktury drzewiastej a zadne durne zasobozerne rekurencje ci nie beda potrzebe.
google: drzewka IP |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 220 Pomógł: 18 Dołączył: 5.02.2016 Skąd: Polska Ostrzeżenie: (0%) ![]() ![]() |
No przecież możesz dodać wiele kategorii. ID | kategoria | Subkategoria | produkt Przykład: 1 | 1,2,3 | 1,2 | Nazwa produktu. Przy wyświetlaniu patrzysz, czy w danej kolumnie jest np. kategoria 1 i wyświetlasz. To są podstawy (IMG:style_emoticons/default/tongue.gif) Póki co Twoja baza wymaga, żeby dla każdego produktu w danej kategorii był nowy wpis. Po co? Jest produkt i ma przydzielone konkretne kategorie. Ten post edytował Niree 6.12.2016, 21:37:11 |
|
|
![]()
Post
#9
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Przy wyświetlaniu patrzysz, czy w danej kolumnie jest np. kategoria 1 i wyświetlasz. To są podstawy (IMG:style_emoticons/default/facepalmxd.gif) NIree ja cie najmocniej przepraszam ale ty ostatnio jak cos palniesz to az strach. I jeszcze wyjezdzasz ze to sa podstawy.... Sam sie podksztalc troche w podstaw baz danych i ja sie poprawnie je projektuje bo to co teraz wygadujesz to herezje. |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 220 Pomógł: 18 Dołączył: 5.02.2016 Skąd: Polska Ostrzeżenie: (0%) ![]() ![]() |
(IMG:style_emoticons/default/facepalmxd.gif) NIree ja cie najmocniej przepraszam ale ty ostatnio jak cos palniesz to az strach. I jeszcze wyjezdzasz ze to sa podstawy.... Sam sie podksztalc troche w podstaw baz danych i ja sie poprawnie je projektuje bo to co teraz wygadujesz to herezje. (IMG:style_emoticons/default/haha.gif) Nie jeden skrypt na tej zasadzie robiłem. Nie widzę sensu rozdzielania tego. Tak samo jak np. system z podziałem na uprawnienia. Robiłbyś osobne kolumny do danego modułu, czy lepiej uprawnienia połączyć przecinkami, a później na stronie rozdzielać explode()? |
|
|
![]()
Post
#11
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Robiłbyś osobne kolumny do danego modułu, czy lepiej uprawnienia połączyć przecinkami, a później na stronie Lo matko.... jakie kolumny....Cytat Nie jeden skrypt na tej zasadzie robiłem. To, ze robisz skrypty bez znajomosci podstaw baz danych, nie znaczy ze to jest dobrze i masz te "wiedze" wbijac innym.NIe, zaproponowany przez ciebie model jest totalnie zly. Podejscie autora jest prawidlowe, procz rzecz jasna faktu, ze wybral zla strukture na drzewo. Tak, tworzy sie wlasnie tabele wiazaca produkty z kategoriami i tak, dla kazdej pary produkt-kategoria tworzy sie kolejny rekord w bazie. Dzieki temu mozna robic wszelke niezbedne operacje na bardzo duzych bazach bardzo szybko. |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 220 Pomógł: 18 Dołączył: 5.02.2016 Skąd: Polska Ostrzeżenie: (0%) ![]() ![]() |
Chyba przez Ciebie zacznę pić. (IMG:style_emoticons/default/arrowheadsmiley.png)
|
|
|
![]()
Post
#13
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Jesli miedzy kieliszkami bedziesz studiowal podstawy to tylko na zdrowie ci wyjdzie (IMG:style_emoticons/default/tongue.gif)
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 1 Dołączył: 6.12.2016 Ostrzeżenie: (0%) ![]() ![]() |
nospor, dziękuję znalazłem to: http://www.eioba.pl/a/3m/drzewa-w-php-i-mysql
Stworzenie tabeli ze strukturą drzewiastą to nie problem, dłużej mi się zejdzie zrozumienie tego jak to działa (IMG:style_emoticons/default/sad.gif) |
|
|
![]()
Post
#15
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Bo wybrales calkiem trudna implementacje drzewa.
Ja ci podalem: drzewka IP sa o wiele prostsze a robia co maja robic (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 1 Dołączył: 6.12.2016 Ostrzeżenie: (0%) ![]() ![]() |
nospor, a mógłbyś podrzucić jakiś link z prostszą implementacją? Najlepiej po polsku
|
|
|
![]()
Post
#17
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
No patrz, nie moge znalezc... domeny na ktorych to kiedys bylo teraz sa juz nieaktywne :/
Podam ci w skrocie idee, zlekka zmodyfikowana przeze mnie: W tabeli drzewka IP nie masz id rodzica. Zamiast tego masz pelna sciezke od rodzica do dziecka. Czyli jesli masz kategorie kat1(id 1) ktora ma kategorie kat2(id 2) ktora ma kategorie kat3(id 3) to tak beda wygladaly rekordy: ID, NAME, IP, LEVEL 1, kat1, 1., 0 2, kat2, 1.2., 1 3, kat3, 1.2.3., 2 Jak widzisz sciezka wyglada jak adres IP stad nazwa Ja do sciezki dodaje tez ID aktualnego rekordu - mi to pomagalo w wyszukiwaniach Dodaje rowniez LEVEL ktory mowi o stopnu zagniezdzenia elementu - rownie pomocne w pewnych przypadkach. Ja rowniez na koniec kazdej sciezki dodaje kropke - tez mi to ulatwialo wyszukiwania I teraz jak chcesz znalezc wszystkie kategorie nalezace do kat1 to dajesz: select * from categories where IP like '1.%'; i juz. Oczywiscie na pole IP musi byc zalozony index Jak chcesz znalezc wszystkie nalezace do kat2 to dajesz select * from categories where IP like '1.2.%'; To tak w skrocie (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 1 Dołączył: 6.12.2016 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki dobry człowieku, ta wersja wygląda na znacznie prostszą do zrozumienia (IMG:style_emoticons/default/smile.gif) Będę te metodę testował i się odezwę jak mi poszło (IMG:style_emoticons/default/smile.gif) Muszę ogarnąć jeszcze kod php dodawania kategorii w takim drzewie ale spróbuję najpierw sam (IMG:style_emoticons/default/smile.gif)
Dobrze myślę że do dodania kategorii potrzeba przynajmniej 2 zapytań? Jedno insert a drugie update z last insert id żeby wystawić na końcu ip id aktualnej kategorii? Poziom zagnieżdżenia mogę liczyć np po ilości kropek w ip kat. nadrzednej? A jeśli jest bez nadrzędnej dawać 0? Usuwanie kategorii poprzedzam sprawdzeniem ip z % na końcu, jak jest 1 rekord usuwam. Dobrze myślę? |
|
|
![]()
Post
#19
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Dobrze myślę że do dodania kategorii potrzeba przynajmniej 2 zapytań? Jedno insert a drugie update z last insert id żeby wystawić na końcu ip id aktualnej kategorii? TakCytat Poziom zagnieżdżenia mogę liczyć np po ilości kropek w ip kat. nadrzednej? Poziom zagniezdzenia dla podkategorii znasz na podstawie kategorii nadrzednej czyli LEVEL KATEGORII NADRZEDNEJ +1Cytat Usuwanie kategorii poprzedzam sprawdzeniem ip z % na końcu, jak jest 1 rekord usuwam. Dobrze myślę? A tego nie rozumiem. Co masz na mysli usuwanie kategorii? Mowisz o usuwaniu kategorii wraz z podkategoriami?
|
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 1 Dołączył: 6.12.2016 Ostrzeżenie: (0%) ![]() ![]() |
Jesli wezme zwyklym delete bez sprawdzenia czy usuwania kategoria nie ma podkategorii to może się zdarzyć że usunę kategorię która ma jeszcze gałąź niżej i do czego będą się odwoływać te niższe podkategorie? To mam na myśli ale rozwinę to później bo pisanie z telefonu to dla mnie udręką 😀😀
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 20:31 |