Problem wygląda tak:
mam dwie tabele: kategorie oraz przedmiot, wiadomo że w przedmiocie(aukcji) zawierają się klucze o wartości "id_kategoria", jednak tabela przedstawia drzewo kategorii więc produkt jest przypięty do końcówki (kategoria "laptop" zawiera "acer" oaz "samsung" więc Acer inspiron X3 będzie zawierał klucz z "acer" anie z "laptop"), i właśnie tu zaczyna się problem: jak kliknę na link acer to wyświetlę spokojnie acery ale jak kliknę "laptop" to jak mam wyświetlić produkty podkategorii zachowując sortowanie ogólne (np. produkty po czasie rejestracji) - wspomnę iż zagłębienie kategorii jest nieograniczone.
Niżej przedstawiam tabelę oraz funkcję rysującą drzewo kategorii.
Tabela aukcji:
CREATE TABLE IF NOT EXISTS `przedmiot` ( `id_przedmiot` mediumint(8) UNSIGNED NOT NULL AUTO_INCREMENT, `klucz_user_przedmiot` mediumint(8) UNSIGNED DEFAULT NULL, `klucz_kategoria_przedmiot` mediumint(7) UNSIGNED NOT NULL, `zdjecie_przedmiot` varchar(60) COLLATE utf8_unicode_ci NOT NULL, `tytul_przedmiot` varchar(70) COLLATE utf8_unicode_ci NOT NULL, `krotki_opis_przedmiot` varchar(300) COLLATE utf8_unicode_ci NOT NULL, `klucz_opis_przedmiot_przedmiot` mediumint(8) UNSIGNED NOT NULL, `cena_przedmiot` double(10,2) UNSIGNED NOT NULL, `stan_magazynowy_przedmiot` mediumint(5) UNSIGNED NOT NULL, `czas_trwania_przedmiot` tinyint(2) UNSIGNED DEFAULT NULL, `klucz_opcje_dostawy_koszt_przedmiot` mediumint(8) UNSIGNED NOT NULL, `wysylka_w_ciagu_przedmiot` tinyint(1) UNSIGNED DEFAULT NULL, `faktura_vat_przedmiot` tinyint(1) UNSIGNED DEFAULT NULL, `dotadkowe_informacje_przedmiot` varchar(500) COLLATE utf8_unicode_ci DEFAULT NULL, `p_stronaglowna_przedmiot` tinyint(1) UNSIGNED NOT NULL, `p_stronakategorii_przedmiot` tinyint(1) UNSIGNED NOT NULL, `p_wyroznienieproduktu_przedmiot` tinyint(1) UNSIGNED NOT NULL, `p_podswietlenie_przedmiot` tinyint(1) UNSIGNED NOT NULL, `p_produktwpromocja_przedmiot` double(10,2) UNSIGNED NOT NULL, `status_przedmiot` tinyint(2) DEFAULT NULL, `data_rejestracji_przedmiot` datetime NOT NULL, `data_zakonczenia_przedmiot` datetime DEFAULT NULL, PRIMARY KEY (`id_przedmiot`), KEY `krotki_opis_przedmiot_2` (`krotki_opis_przedmiot`), KEY `tytul_przedmiot_3` (`tytul_przedmiot`), KEY `krotki_opis_przedmiot_3` (`krotki_opis_przedmiot`), FULLTEXT KEY `tytul_przedmiot` (`tytul_przedmiot`), FULLTEXT KEY `krotki_opis_przedmiot` (`krotki_opis_przedmiot`), FULLTEXT KEY `tytul_przedmiot_2` (`tytul_przedmiot`), FULLTEXT KEY `tytul_przedmiot_4` (`tytul_przedmiot`), FULLTEXT KEY `krotki_opis_przedmiot_4` (`krotki_opis_przedmiot`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=10000586 ;
Tabela kategorie:
CREATE TABLE IF NOT EXISTS `kategoria` ( `id_kategoria` mediumint(7) UNSIGNED NOT NULL AUTO_INCREMENT, `rodzic_kategoria` mediumint(7) UNSIGNED NOT NULL, `nazwa_kategoria` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, `tytul_kategoria` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, `meta_description` varchar(700) COLLATE utf8_unicode_ci DEFAULT NULL, `meta_keywords` varchar(500) COLLATE utf8_unicode_ci DEFAULT NULL, `przyjazny_url_kategoria` varchar(400) COLLATE utf8_unicode_ci DEFAULT NULL, `status_kategoria` smallint(5) UNSIGNED NOT NULL, PRIMARY KEY (`id_kategoria`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=10000228 ;
Funkcja rysująca drzewo:
function view_category_ul_li_tree_root($rodzic_kategoria, $level) { $result = mysql_query("SELECT a.id_kategoria, a.nazwa_kategoria, a.przyjazny_url_kategoria, Deriv1.Count FROM `kategoria` a LEFT OUTER JOIN (SELECT rodzic_kategoria, COUNT(*) AS Count FROM `kategoria` GROUP BY rodzic_kategoria) Deriv1 ON a.id_kategoria = Deriv1.rodzic_kategoria WHERE a.rodzic_kategoria=" . $rodzic_kategoria); if ($row['Count'] > 0) { $ar .= '<li id="id' . $row['id_kategoria'] . '" class="folder"><span><a href="#" onClick="loadPage1(\'./index.php?view=category&action=editcategory&decision=show&type_of_loading=ajax&delete=no&id_category=' . $row['id_kategoria'] . '\');">' . $row['nazwa_kategoria'] . '</a></span> <ul>'.view_category_ul_li_tree_root($row['id_kategoria'], $level + 1).'</ul></li>'; } elseif ($row['Count'] == 0) { $ar .= '<li class="noLink" id="id' . $row['id_kategoria'] . '"><span><a href="#" onClick="loadPage1(\'./index.php?view=category&action=editcategory&decision=show&type_of_loading=ajax&delete=yes&id_category=' . $row['id_kategoria'] . '\');">' . $row['nazwa_kategoria'] . '</a></span></li>'; } } return $ar; }