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
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




W obu przypadkach można zastosować to samo rozwiązanie: przypisując produkt do kategorii równocześnie przypisujemy go do wszystkich kategorii nadrzędnych czyli mając strukturę kategorii:
Kod
1
-- 1.1
-- 1.2
----1.2.1

i chcąc przypisać produkt do kategorii 1.2.1 zaznaczamy 1.2.1, 1.2 oraz 1.1. Można to rozwiązać ładnym JSem, który automatycznie zaznaczy całą ścieżkę do kategorii. Co nie zmienia jednak faktu, że pewnie przyjrzę się bliżej drzewkom IP. Może, bazując na doświadczeniu, podałbyś ich minusy?
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: 17.10.2025 - 19:04