Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Jak pobrac produkty wszystkich podkategorii z danej kategorii ?
Forum PHP.pl > Forum > Przedszkole
Octobus
Witam,

potrzebuje zeby w sklepie, w glownej kategorii wyswietlaly sie produkty z wszystkich podkategorii. Przygotowalem taka tabele `kategorie`:

wchodzac do 1 kategorii Akcesoria do Iphone, chce miec pobierane od razu produkty rowniez z kategorii Iphone.

Przykladowe zapytanie dla kategorii:
Cytat
select * from `baza`
inner join `produkty` on `baza`.`id_produktu` = `produkty`.`id`
inner join `produkty_kategorie` on `baza`.`id_produktu` = `produkty_kategorie`.`id_produktu`
inner join `kategorie` on `produkty_kategorie`.`id_kategorii` = `kategorie`.`id`
where `kategorie`.`id` = 3


wiem ze moge pobrac najpierw kategorie, zobaczyc jakie ma route i dopiero konstrulowac zapytanie, ale pomyslalem ze moze da sie jednym zapytaniem jakos to rozwiazac ? Cos w rodzaju
Cytat
where (`kategorie`.`id` = 3 or `route` like CONCAT(`route`,'/',`id_kategorii`,'/%') )

tylko nie potrafie tego ostatniego napisac
nospor
Zacznij od przygotowania poprawnej struktury drzewiastej np
google: drzewka ip
Octobus
wlasnie z tego nie chcialem korzystac ... wzoruje sie troche na magento 2, tam jaka taka strukture bazy danych. Dla mnie jest prostrza niz drzewa ip ktore kiedys robilem i przez nie mialem wiecej problemow niz pozytku. Wole cos prostrzego.
nospor
Ja wiem, ze ta podstawowa wersja drzewka jest prosta wizualnie ale jest cholernie nie optymalna. A takie drzewka IP wbreb pozorom tez sa banalne. Od dodajesz jeszcze sciezke kategorii.
No, ale twoja sprawa.

Moment, nie dolukalem, przeciez teraz wlasnie masz drzewka ip... wszystko co masz miec masz w route lol... slepak ze mnie
Octobus
tylko mam teraz zrobione ze jest dodatkowe zapytanie o kategorie i dopiero tworze regule
Kod
where (`kategorie`.`id` = 3 or `route` like "3/%" )

w razie gdyby route kategorii aktualnej bylo np. 5/2/3, zeby dac like "5/2/3/%"

ale tak pomyslalem ze lepiej byloby to zrobic w jednym zapytaniu, tylko nie potrafie go napisac ... ponizsze oczywiscie nie dziala
Kod
where (`kategorie`.`id` = 3 or `route` like CONCAT(`route`,'/',`id_kategorii`,'/%') )
nospor
no to lecim. Nie wiem po co do tego contact dodajesz route...

where (`kategorie`.`id` = 3 or `route` like '0/3%'

to bedzie oczywiscie zle gdy bedziesz mial jakas kategorie z id np 34. Dlatego tez ja w route dodaje / zawsze na koncu czyli nie 0/3 a 0/3/ wowczas
where (`kategorie`.`id` = 3 or `route` like '0/3/%'

Ja rownie w route trzymam id danego rekordu czyli
mialbym route
0/3/
oraz
0/3/13/

wowczas w ogole bajka
where (`route` like '0/3/%')

No i ja nie trzymam tego 0 w route bo jest totalnie zbedne
Octobus
ok, dobre rady, zastosuje je. Pytanie tylko czy da sie uzyc `route` like '0/3/4%' majac podane jedynie id_kategorii = 4 w jednym zapytaniu. Czy moze za mocno kombinuje i juz niech sie pobiera za kazdym razem info o route kategorii ? Wydaje mi sie po prostu ze najlepiej w jednym zapytnaiu wszystko zawrzec
nospor
Mozesz probowac sie bawic w podzapytanie czy dodatkowego joina ale po co? Przerost formy nad trescia. Pobierz sobei dodatkowo te route i po sprawie.

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.