![]() ![]() |
Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 61 Pomógł: 0 Dołączył: 10.03.2005 Ostrzeżenie: (0%)
|
Witam ponownie!
Mój problem polega na tym że potrzebuję zrobić system przeglądania wpisów, z których każdy ma jakąś kategorie główną i podkategorie. Liczba kategori i podkategori jest dynamiczna, użytkownik sam sobie je definiuje. PROBLEM : Jak wstawić takie coś do bazy MySqla? Jak potem stworzyć zapytanie, w którym wybieramy wpisy z danej kategori lub podkategori? Głównie problem polega na tym że do bazy trzeba wstawić więcej niż 1 podkategorie. Mam już kolumnę "Kategoria", myślałem nad stworzeniem drugiej kolumny "Podkategorie", ale co tam wstwaić? Stringi nazw kategori oddzielone przecinkami, potem ewentualnie rozbijać to przy użyciu funkcji expolde z php? Cały czas rozbijam się o to że w 1 kolumnie może być własnie te pare podkategori. Niestety nie mogę dodać sobie komumn "Podkategoria_1", "Podkategoria_2" itd. Myślałem nad typem enum... ale to chyba nie zda egzaminu. Moja pierwsza propozycja jest taka : Nazwy kategori zapisac jako string, rozdzielone przecinkami, kazda nazwa bedzie miala swoj znak konca i poczatku stringu, tzn. zapis bedzie mniej wiecej taki : @nazwa kategori 1@, @nazwa kategori 2@... itd gdzie znaki @ to poczatek i koniec stringu. Potem dajemy tylko wyszukiwanie przez SELECT i w WHERE dajemy 'Podkategorie' LIKE '@%nazwa kategori szukanej%@'. Może nawet obejdzie się bez %. Jakieś pomysły? Ten post edytował pc5 19.04.2005, 21:00:09 |
|
|
|
Post
#2
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
tabela kategorie (kolumny):
Cytat ID NAME .....jakies tam jeszcze jakie bedą ci potrzebne PARENT gdzie, ID to ID kategorii NAME - nazwa kategoriii ..... PARENT to ID kategori nadrzędnej do danej. Jesli to ID jest null, znaczy się że dana kategoria nie jest podkategorią innej. Jesli to id jest ustawione, znaczy że dana kategoria jest podkategorią innej o podanym ID. To jest dość powszechne stosowane rozwiązanie |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 61 Pomógł: 0 Dołączył: 10.03.2005 Ostrzeżenie: (0%)
|
Cytat(nospor @ 2005-04-20 06:55:16) tabela kategorie (kolumny): Cytat ID NAME .....jakies tam jeszcze jakie bedą ci potrzebne PARENT gdzie, ID to ID kategorii NAME - nazwa kategoriii ..... PARENT to ID kategori nadrzędnej do danej. Jesli to ID jest null, znaczy się że dana kategoria nie jest podkategorią innej. Jesli to id jest ustawione, znaczy że dana kategoria jest podkategorią innej o podanym ID. To jest dość powszechne stosowane rozwiązanie Przyznam się że nie za bardzo rozumiem. Sytuacja wygląda teraz tak że mam już stworzoną tabelę 'Katrgorie' i jest tam id i nazwa. Mam też osobną tabelę 'Wpisy' i tam mam kolumnę 'Kategoria' (możę być wybrana tylko 1), a potrzebuje do każdego wpisu dołożyć jeszcze podkategorie, może ich być nawet 100. Prosibłym o troszkę bardziej łopatologiczne wyjaśnienie tego rozwiązania. Z tego co zrozumiałem wychodzi na to że dana kategoria może być podkategoria innej itd, ale czy to nie jest zbyt ogólne? Chodzi mi o to by każdy wpis miał swój unikalny system podkategori i kategori. Przypisanie na stałe podkategori do kategori to nie problem. W głównej mierze chodzi mi o to by potem to łatwo zmieniac i nie konsturować trudnych zapytań do bazy. A może da się to jakoś zrobić za pomocą 2 zapytań? Sam już nie wiem. Pozdrawiam - KM |
|
|
|
Post
#4
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
W rozwiązaniu co Ci podałem dla danej kategorii może istnieć nawet i milion podkategorii i to nie stanowi problemu.
Każda kategoria ma swój unikalny ID. On nic nie mówi o kategori czy podkategorii. Dopiero gdy masz ustawiony PARENT, to wiesz, że dana kategoria jest podkategorią kategorii o ID w PARENT. przykład (tabela kategoria): Cytat ID | NAME | PARENT 1 | KAT1 | null 2 | PKAT1| 1 3 | PKAT2| 1 4 | KAT2 | null 5 | PKAT3| 4 6 | PKAT4| 4 KAT1 -----PKAT1 -----PKAT2 KAT2 -----PKAT3 -----PKAT4 Rozjaśniło się trochę? |
|
|
|
Post
#5
|
|
|
Grupa: Zarejestrowani Postów: 61 Pomógł: 0 Dołączył: 10.03.2005 Ostrzeżenie: (0%)
|
Cytat(nospor @ 2005-04-20 09:41:27) W rozwiązaniu co Ci podałem dla danej kategorii może istnieć nawet i milion podkategorii i to nie stanowi problemu. Każda kategoria ma swój unikalny ID. On nic nie mówi o kategori czy podkategorii. Dopiero gdy masz ustawiony PARENT, to wiesz, że dana kategoria jest podkategorią kategorii o ID w PARENT. przykład (tabela kategoria): Cytat ID | NAME | PARENT 1 | KAT1 | null 2 | PKAT1| 1 3 | PKAT2| 1 4 | KAT2 | null 5 | PKAT3| 4 6 | PKAT4| 4 KAT1 -----PKAT1 -----PKAT2 KAT2 -----PKAT3 -----PKAT4 Rozjaśniło się trochę? Dobrze, ale to przecież jest przypisanie tylko do tabeli Kategorie. Cały czas chodzi o to że mam np. wpisy id nazwa_firmy kategoria_id podkategorie 0 Onet 5 (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ? 1 Wp 5 (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ? itd. itd. gdzie mam zdefiniowaną tabelę Kategorie a w niej tylko nazwy kategori i ich id, które są dodawane do pól w tabeli 'Wpisy' czyli id nazwa_kategori 5 Portale 7 Wyszukiwarki 10 Rejestracja 11 Internet 12 e-mail itd itd... każdy wpis moze mieć tylko jedną kategorię główną z tabeli 'Kategorie', ale podkategori może mieć więcej. '?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ' oznacza własnie moją niewiadomą. Co tam wstawić? najrpościej id podkategori, czyli id kategori z tabeli 'Kategorie', ale problem polega na tym że skonstruować potem zapytanie i edytować podkategorie takiego wpisu może być ciężko. Teoretycznie chce mieć w tym polu np. dla wpisu o id 0 z tabeli 'Wpisy' (czyli onet) podkategorie 6,12,11 i moze inne, a dla Wp, chce miec juz inne np. 10 11 Przepraszam jeżeli czegoś nie rozumiem i totalnie nie trafiam w sedno sprawy. Być może to jest rozwiązanie, ale jakoś nie wiem jak to wykorzystać. Cały czas jestem przekonany że w tabeli 'Kategorie', przez proponowane rozwiązanie, definiujemy na stałe co jest podkategorią czego itd, a tutaj zupełnie nie o to chodzi, każdy wpis ma swój system gdzie jest kategoria i różne podkategorie. Jest ciężko, ale dzieki za pomoc (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
|
Post
#6
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
Skoro już tak bardzo upierasz się przy swoim rozwiązaniu to dobra (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Proponuję je tylko trochę zmienić: Tabela twoich kategorii pozostaje bez zmian. Teraz tabela firm FIRMA: Cytat ID NAME Teraz tabela FIRMA_KATEGORIA, która zawiera informacje jakie kategorie zawiera firma i jakie podkategorie zawiera kategoria: Cytat ID_FIRMA - klucz obcy z tabeli FIRMA ID_KATEGORIA - kategoria glowna, klucz obcy z tabeli KATEGORIA ID_PODKATEGORIA - pod kategoria kategori z ID_KATEGORIA, klucz obcy z tabeli KATEGORIA Przykład: KATEGORIA: Cytat 5 Portale 7 Wyszukiwarki 10 Rejestracja 11 Internet 12 e-mail FIRMA: Cytat 0 ONET 1 WP FIRMA_KATEGORIA: Cytat 0 5 7 0 5 10 1 11 12 ONET ------Portale ----------Wyszukiwarki ----------Rejestracja WP ------Internet |
|
|
|
Post
#7
|
|
|
Grupa: Zarejestrowani Postów: 61 Pomógł: 0 Dołączył: 10.03.2005 Ostrzeżenie: (0%)
|
Wydaje mi się że znalazlem prostsze rozwiązanie, to proponowane przezemnie wcześniej. Otóż w doatkowej kolumnie podkategorie_id typu char przechowuję string, budowany przez impolde, a w stringu umieszczam id wybranych podkategori, potem sprawdzam czy dana kategoria jest w podkategoriach, robie to wpierw tak ze daje expolode danego stringa i w ten sposob mam tablice z wybranymi id, a potem juz tylko sprawdzam czy dane id jest w tablicy (funkcja in_array troszke zmodyfikowaną). Działa ładnie.
Co do Twojego rozwiązania nospor, widać nie dorosłem jeszcze w edukacji mysqla do zastosowania takiej konstrukcji. Jednak na pewno do tego wrócę i przyda się na pewno. Tak więc na razie stosuję swoje rozwiązanie. Dzięki za pomoc! Pozdrawiam! |
|
|
|
Post
#8
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
Twoje rozwiązanie ma poważną wadę.
Przykładowo: ŻEby znaleźć, czy dana kategoria jest pod kategorią jakiejś innnej, musisz najpierw wczytać podkategorie z bazy, rozbić string na tablicę i dopiero stwierdzić. W moim rozwiązaniu zaŁatwi się to zapytaniem prostym i przyjemnym. Ale jeśli Twój sposób ci wystarcza, to znaczy że wszytko jest ok. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) pozdro |
|
|
|
![]() ![]() |
|
Aktualny czas: 21.12.2025 - 01:59 |