Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kategorie - reprezentacja w bazie.
Forum PHP.pl > Forum > Bazy danych
matwiej
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 ?
Kshyhoo
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>';
Crozin
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.
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.