Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Kategorie - reprezentacja w bazie.
matwiej
post
Post #1





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 1.02.2010

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


Tworze sobie aplikację coś ala ogłoszenia.
Chciałbym aby każde ogłoszenie mogło należeć do kilku kategorii. A kategorie mogą tworzyć drzewo (czyli podkategorie itp). I tutaj własnie mam problem jak przechować jakie drzewo katalogów w bazie ? Może ktoś ma jakiś przykład do pokazania ?
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #2





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Sposobów pewnie jest wiele. Ja mam tak:

tabela kategorie przechowująca kategorie:
kat_id
kat_kategoria
kat_cat
kat_order

  1. CREATE TABLE `tabela`.`kategoria` (
  2. `kat_id` int( 11 ) NOT NULL AUTO_INCREMENT ,
  3. `kat_kategoria` varchar( 255 ) collate utf8_polish_ci DEFAULT NULL ,
  4. `kat_cat` int( 11 ) NOT NULL ,
  5. `kat_order` int( 11 ) NOT NULL ,
  6. UNIQUE KEY `id` ( `kat_id` ) ) ENGINE = MyISAM DEFAULT CHARSET = utf8 COLLATE = utf8_polish_ci;


tabela tut_kat przechowująca powiązania przedmiotu (np. artykułu) z kategoriami:
id_tut
id_kat
  1. CREATE TABLE `tabela`.`tut_kat` (
  2. `kat_id` int( 11 ) NOT NULL AUTO_INCREMENT ,
  3. `kat_kategoria` varchar( 255 ) COLLATE utf8_polish_ci DEFAULT NULL ,
  4. `kat_cat` int( 11 ) NOT NULL ,
  5. `kat_order` int( 11 ) NOT NULL ,
  6. UNIQUE KEY `id` ( `kat_id` )
  7. ) ENGINE = MYISAM DEFAULT CHARSET = utf8 COLLATE = utf8_polish_ci


Wtedy masz do dyspozycji SELECT/OPTION z MULTIPLE (tu dodatkowo z OPTGROUP):
  1. $kat_list = "";
  2. $_GET['kat_id'] = '';
  3. $result = dbquery("SELECT kat_id, kat_kategoria FROM kategorie WHERE kat_cat='0' ORDER BY kat_order");
  4. if (dbrows($result) != 0) {
  5. while ($data = dbarray($result)) {
  6. $result2 = dbquery("SELECT kat_id, kat_kategoria FROM kategorie WHERE kat_cat='".$data['kat_id']."' ORDER BY kat_order");
  7. if (dbrows($result2) != 0) {
  8. $kat_list .= "<optgroup label='".$data['kat_kategoria']."'>\r\n";
  9. while ($data2 = dbarray($result2)) {
  10. $kat_list .= "<option value='".$data2['kat_id']."'>".$data2['kat_kategoria']."</option>\r\n";
  11. }
  12. $kat_list .= "</optgroup>\r\n";
  13. }
  14. }
  15. }
  16. echo '<select name="kat_id[]" id="kat" class="textbox" style="width: 150px" size="5" multiple>'.$kat_list.'</select>';


Ten post edytował Kshyhoo 14.11.2013, 20:44:18
Go to the top of the page
+Quote Post
Crozin
post
Post #3





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. Zapisanie drzewa kategorii w bazie danych najlepiej zrealizować przy pomocy tzw. modelu NestedSet - jest to na dobrą sprawę jedna z najlepszych technik zapisu hierarchicznych danych w relacyjnych bazach danych.
2. Przypisanie ogłoszenia do wielu kategorii to najzwyklejsza relacja wiele-do-wielu.
Go to the top of the page
+Quote Post

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: 24.08.2025 - 15:31