Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SQL] Kategorie - optymalnie?
sniver
post
Post #1





Grupa: Zarejestrowani
Postów: 159
Pomógł: 5
Dołączył: 31.08.2007

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


Pierwowzorem w kategoriach N zagłębienia dla mnie są duże serwisy takie jak allegro, amazon, beltal, alibaba, ebay itp.

Chciałem stworzyć coś co będzie działać w/g zasad jakie panują na allegro. Udało mi się zmontować następujące rzeczy:

Struktura tabeli w bazie danych:
  1. CREATE TABLE IF NOT EXISTS `categories` (
  2. `CAT_Id` int(11) NOT NULL AUTO_INCREMENT,
  3. `PARENT_Id` int(11) NOT NULL DEFAULT '0',
  4. `CAT_Name` varchar(155) NOT NULL,
  5. `CAT_Url` varchar(75) NOT NULL,
  6. `CAT_Description` varchar(255) NOT NULL,
  7. `CAT_Sort` int(11) NOT NULL DEFAULT '0',
  8. `CAT_Counter` int(11) NOT NULL,
  9. `CAT_Active` int(11) NOT NULL DEFAULT '1',
  10. PRIMARY KEY (`CAT_Id`),
  11. KEY `INDEX_GLOWNY` (`CAT_Id`,`PARENT_Id`,`CAT_Counter`,`CAT_Active`) USING BTREE,
  12. KEY `SORT` (`PARENT_Id`,`CAT_Sort`)
  13. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=106 ;



Oraz zapytanie które obsługuje:
  1. SELECT
  2. `CAT_Id` AS `id`,
  3. `PARENT_Id` AS `parent`,
  4. `CAT_Name` AS `name`,
  5. `CAT_Url` AS `url`,
  6. `CAT_Counter` AS `licznik`
  7.  
  8. FROM
  9. `categories` AS `c`
  10.  
  11. WHERE
  12. (
  13. (`c`.`CAT_Active` = 1)
  14. AND (`c`.`CAT_Counter` > 0)
  15. )
  16. AND (
  17. (`c`.`CAT_Id` = {#ID})
  18. OR (`c`.`PARENT_Id` = {#ID})
  19. OR (`c`.`PARENT_Id` = (
  20. SELECT
  21. `c2`.`CAT_Id`
  22. FROM
  23. `categories` AS `c2`
  24. WHERE
  25. (`c2`.`CAT_Id` = (
  26. SELECT
  27. `c3`.`PARENT_Id`
  28. FROM
  29. `categories` AS `c3`
  30. WHERE
  31. (`c3`.`CAT_Id` = {#ID})
  32. LIMIT 1
  33. )
  34. )
  35. LIMIT 1
  36. )
  37. )
  38.  
  39. OR (`c`.`PARENT_Id` = (
  40. SELECT
  41. `c3`.`PARENT_Id`
  42. FROM
  43. `categories` AS `c3`
  44. WHERE
  45. (`c3`.`CAT_Id` = {#ID})
  46. LIMIT 1
  47. )
  48. )
  49. )
  50.  
  51. ORDER BY
  52. `c`.`PARENT_Id` ASC,
  53. `c`.`CAT_Sort` ASC


W miejscu gdzie występuje ciąg {#ID} należy wprowadzić wybraną kategorie...

Licznik jest wyliczany cyklicznie w cronie raz na kilka minut...

Póki co chcę się dowiedzieć co sądzicie o takim czymś - dobrze czy źle?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




minus drzewek IP... w porównaniu z parentID nie widze (IMG:style_emoticons/default/winksmiley.jpg)

A juz powaznie:
ja drzewka IP uzywam lekko zmodyfikowane. jak juz pisalem sam na to wpadlem a dopiero potem sie okazalo ze do drzewko IP jest. Ja dodaje do tego jeszcze parentID oraz firstID.
firstID to id kategorii pierwszej. Czyli jak mam kategorie na poziomi 10 to firstID wskazuje na kategorię z poziomu 1. I tak jest niezaleznie od poziomu kategorii.

Zabawy jest trochę przy zarządzaniu: np. przy przenoszeniu kategorii trzeba pamietac, by zmodyfikowac rownież wpisy we wszystkich jej kategoriach podrzednych. Przy samym parentID juz bys tego nie mial. No ale trudno to uznac za wadę - trzeba to zrobic i tyle. przy kolejnych projektach jest tylko kopiuj-wklej i juz (IMG:style_emoticons/default/smile.gif)

Żeby powaznie pomowic o wadach, musialbym uzywac innych struktur drzewiastych i miec jakies porownanie. A ja nie uzywam. Kiedys doszedlem do tego etapu struktury i jak do tej pory mi się sprawdzał. Jak kiedys na trafie na sytuacje ze nie bedzie sie sprawdzal - zmienie strukture (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Posty w temacie
- sniver   [SQL] Kategorie - optymalnie?   23.04.2010, 10:43:34
- - nospor   zastosowana przez ciebie metoda jest najgorsza ze ...   23.04.2010, 10:46:30
|- - phpion   Cytat(nospor @ 23.04.2010, 11:46:30 )...   23.04.2010, 11:13:36
- - sniver   wzorować czyt. efekt końcowy no bo jak sie tu ina...   23.04.2010, 10:47:41
- - Wykrywacz   Myślę że ktokolwiek kto będzie czekał na wynik teg...   23.04.2010, 10:53:33
- - nospor   @phpion moze i ma parentId. Ale na pewno nie ma ty...   23.04.2010, 11:15:08
- - phpion   Może to dobry moment na debatę sam jestem jednak ...   23.04.2010, 11:19:11
- - nospor   ok, pierwszy lepszy przyklad z brzegu: Masz produk...   23.04.2010, 11:24:55
- - sniver   ale w tym przypadku ten kod ma tak nie działać g...   23.04.2010, 11:28:11
- - phpion   może coś bardziej życiowego? Nie spotkałem się jes...   23.04.2010, 11:29:12
- - sniver   Sam box na stronie z listą "aktualnych" ...   23.04.2010, 11:45:44
- - nospor   @phpion "niezyciowy" problem? http://al...   23.04.2010, 11:56:53
|- - phpion   Cytat(nospor @ 23.04.2010, 12:56:53 )...   23.04.2010, 12:45:02
- - sniver   znalazłem ciekawą opowieść na ten temat http://b...   23.04.2010, 12:10:03
- - nospor   Cytatale w praktyce powiem czy lepiej sie to spraw...   23.04.2010, 12:13:51
- - sniver   hehehe...już przerobilem w głowie o co w tym chodz...   23.04.2010, 12:22:08
- - nospor   CytatJednak można ścieżkę zapisać do cache i późni...   23.04.2010, 12:55:19
- - phpion   W obu przypadkach można zastosować to samo rozwiąz...   23.04.2010, 13:02:35
- - nospor   Cytatchcąc przypisać produkt do kategorii 1.2.1 za...   23.04.2010, 13:07:33
- - phpion   pewnie masz rację, aż sobie poczytam o tych drzewk...   23.04.2010, 13:09:47
- - nospor   minus drzewek IP... w porównaniu z parentID nie wi...   23.04.2010, 13:16:32
- - 6nom   http://www.depesz.com/various/various-sqltrees.php   23.04.2010, 13:56:40
- - Mchl   A jeśli ma się możliwość, to najlepiej z drzewkami...   23.04.2010, 14:17:04
- - cojack   http://www.depesz.com/index.php/2008/04/11...n-tre...   23.04.2010, 15:20:03
- - sniver   ma ktoś gotowy kod który przerobi parent id na te ...   23.04.2010, 15:21:11
|- - aio   Cytat(sniver @ 23.04.2010, 16:21:11 )...   25.04.2010, 23:46:54
- - cojack   Ja bym poprosił o źródło pochodzenia tego przykład...   26.04.2010, 08:38:03
|- - aio   Cytat(cojack @ 26.04.2010, 09:38:03 )...   26.04.2010, 10:19:01
- - cojack   Hmmm to ja jeszcze poproszę funkcje do przesuwania...   26.04.2010, 15:53:42
|- - aio   Cytat(cojack @ 26.04.2010, 16:53:42 )...   26.04.2010, 22:01:08
- - sniver   Napisałem bardzo byle jakąś procedure (można odpal...   27.04.2010, 07:04:47


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.10.2025 - 17:19