Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [sql] Pobieranie produktów, kilka poziomów kategorii
propage
post 19.10.2008, 17:35:29
Post #1





Grupa: Zarejestrowani
Postów: 330
Pomógł: 0
Dołączył: 25.01.2008

Ostrzeżenie: (0%)
-----


Jak najlepiej pobierać produkty,kiedy jest kilka stopni zagłebień kategorii

Przy 3 poziomach kategorii zapytanie wygląda tak

  1. <?php
  2. SELECT DISTINCT *
  3.  
  4. FROM products_2_categories p_2_c, products p left join promocja pro on (pro.promocja_produkt_id = p.product_id)
  5.  
  6. WHERE p_2_c.product_id = p.product_id AND (p_2_c.category_id  in (SELECT category_id FROM categories WHERE category_parent_id = $category_id UNION SELECT category_id FROM categories WHERE category_parent_id in (SELECT category_id FROM categories WHERE category_parent_id = $category_id)) or  p_2_c.category_id = $category_id )
  7. ?>


Jeszcze bardziej się to komplikuje przy 4 poziomowej strukturze kategorii, jak macie to u siebie rozwiązane. 

Wpadłem tez na pomysł aby funkcją rekurencyjną pobierać najpierw id wszystkich produktów z wszystkich pod kategori do tablicy, a potem 

  1. <?php
  2. ... WHERE p_2_c.product in ($array) 
  3. ?>
 

Ale chyba te rozwiązanie bedzie mniej wydajne niż te wyżej? Ponieważ przy tym rozwiązaniu wyżej nie używam wogóle php do zapytania. 
Go to the top of the page
+Quote Post
pinochet
post 19.10.2008, 20:03:47
Post #2





Grupa: Zarejestrowani
Postów: 120
Pomógł: 12
Dołączył: 9.10.2008
Skąd: Tricity.Rumia()

Ostrzeżenie: (0%)
-----


lepiej by bylo jak bys napisal strukturę tabel a nie jakieś zapytanie ;-/
ja to rozwiązuje tak ze mam tabele:
produkt ( należy do 1 kategori)
ID / CatID
Kategorie:
ID / ParentID

produkt.CatID to identyfikator kategorii a ParentID to identyfikator nadkategorii kategorie najwyższego poziomu mają ParentID = 0 ktory jest wyifowany.
No i pobieramy:
SELECT * FROM produkt WHERE CatID = $_GET['catid']

Wiecej problemów jest jeśli chcesz wyświetlić ścierzkę do produktu tzn np:
kat_st1/kat_st2/kat_st3/produkt
wtedy chyba najlepiej cachować ?
Go to the top of the page
+Quote Post
Pilsener
post 21.10.2008, 07:30:00
Post #3





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Poza ID kategorii i id rodzica wart ododać pole "ścieżka" i "głębokość" - wtedy gdy chcesz wyświetlić listę produktów z kategorii np. 64 to lecisz lajkiem po ścieżce, tu masz więcej na ten temat:
http://blog.mwojcik.pl/2008/02/17/drzewa-k...-php-metoda-ip/

Zrobiłem bez problemu nieskończoną liczbę kategorii i podkategorii, dodawanie, usuwanie, wyświetlanie, edycja etc.
Go to the top of the page
+Quote Post
webasek
post 21.10.2008, 08:20:28
Post #4





Grupa: Zarejestrowani
Postów: 274
Pomógł: 35
Dołączył: 18.07.2008
Skąd: Kielce

Ostrzeżenie: (0%)
-----


Lub napisać funkcję rekurencyjną która jako jeden z parametrów może przyjmować rodzica smile.gif


--------------------
"Tylko dwie rzeczy są nieskończone: wszechświat oraz ludzka głupota,
choć nie jestem pewien co do tej pierwszej." Albert Einstein

Wirtualny Rynek Predykcyjny
Go to the top of the page
+Quote Post
milocha
post 9.12.2008, 09:06:22
Post #5





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 9.12.2008

Ostrzeżenie: (0%)
-----


Mam taki problem nie wiem jak wybrac wszystkie głowne kategorie które nie mają pod kategorii?

Składnia bazy jest klasyczna czyli jest:

Kolumna ID

Kolumna ParenID

ID   ParenID

1     0

2     0

3     1

4     4

5     0



W wyniku chciałbym otrzymać wiersz z ID 2 i 5
Go to the top of the page
+Quote Post
jezoo
post 9.12.2008, 09:55:18
Post #6





Grupa: Zarejestrowani
Postów: 92
Pomógł: 3
Dołączył: 4.04.2006

Ostrzeżenie: (0%)
-----


Cytat(milocha)
W wyniku chciałbym otrzymać wiersz z ID 2 i 5

nie dasz rady poniewaz masz 3 pozycje z ParenID=0 smile.gif (poz 1,2 i 5)
zeby je pobrac to wystarczy, jak to kolega wyzej napisal:
Cytat(pinochet)
  1. SELECT * FROM produkt WHERE CatID = $_GET['catid']


w Twoim wypadku zamiast CatID wstaw ParenID
Go to the top of the page
+Quote Post
erix
post 9.12.2008, 17:06:38
Post #7





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Lub napisać funkcję rekurencyjną która jako jeden z parametrów może przyjmować rodzica

Ta metoda zajeździ serwer. tongue.gif

Poczytaj:
http://artykuly.zyxist.com/czytaj.php/drzewa_w_php_i_mysql


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
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 Wersja Lo-Fi Aktualny czas: 18.07.2025 - 02:43