![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 0 Dołączył: 11.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Mam pewną zagwozdkę, chcę zrobić coś takiego
Kategoria gł1 podkategoriaA 1.publikacja (link Word lub pdf) wielkość pliku, data 2 publikacja (link Word lub pdf) wielkość pliku, data | LINK wyświetl całą zawartość podkategoriiA. | podkategoriaB 1.publikacja (link Word lub pdf) wielkość pliku, data 2 publikacja (link Word lub pdf) wielkość pliku, data 3 publikacja (link Word lub pdf) wielkość pliku, data 4 publikacja (link Word lub pdf) wielkość pliku, data 5 publikacja (link Word lub pdf) wielkość pliku, data | LINK wyświetl całą zawartość podkategoriiB. | Kategoria gł2 1.publikacja (link Word lub pdf) wielkość pliku, data 2 publikacja (link Word lub pdf) wielkość pliku, data | LINK wyświetl całą zawartość kategorii gł2. | A więc chodzi o to, że chcę na stronie umieścić pliki do pobrania, przy czym chcę aby od razu były widoczne i kategorie główne, które mogą zawierać odnośniki do plików(publikacji) jak i podkategorie, oraz powiedzmy widocznych 5 najnowszych publikacji, a pod spodem link do reszty publikacji z danej kategorii/podkategorii po kliknięciu którego przechodzi się do całego spisu publikacji z danej kategorii. Czyli zdaje się dwie tabele (lub trzy), jedna tabela przechowuje dane dotyczące plików, druga tabela przetrzymuje kategorie i podkategorie, ewentualnie osobno tabela z kategoriami i podkategoriami(?). Czy dobrze kombinuję? W PHP jestem laikiem staram się coś nauczyć lecz ja muszę stopniowo rozgryzać koncepcję, a wiele przykładów jest od razu z grubej rury, które są na tyle skomplikowane, że logicznie nie potrafię ich rozpracować i jednocześnie poznać zasad działania. Głownie mam niejasność co do tabeli kategorii i podkategorii, czy to ma być w jednej tabeli czy ma to być jednak rozbite na dwie tabele? Bo za chiny ludowe nie wiem jak to można wyświetlic mając mysql> select * from category; +----+----------+-------------+ | id | deep | name | +----+------+-----------------+ | 1 | 0 | kategoria gł1 | | 2 | 0 | kategoria gł2 | | 3 | 0 | kategoria gł3 | | 4 | 1 | podkategoriaA | | 5 | 1 | podkategoriaB | +----+------+-----------------+ W takiej sytuacji nie wiem jak podpiąć podkategorie do kategorii głównych, to chyba bardziej się nadaje do metody wyświetlania która w danym momencie wyświetla tylko kategorie lub podkategorie w zależnosci od deep. Czy dobrze to rozumiem czy całkowicie poplątałem? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Kombinujesz niepotrzebnie - strukturę generuje się automatycznie, zapoznaj się z funkcją glob. Skrypt automatycznie wygeneruje Ci menu i linki do plików na podstawie struktury i zawartości folderów - na forum i w sieci masz masę przykładów: listing plików, przeglądarka katalogów etc.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 181 Pomógł: 18 Dołączył: 19.04.2008 Ostrzeżenie: (10%) ![]() ![]() |
Wystarczy 1 tabela, w ktorej trzymasz dane plikow i przypisanie do kategorii - kolumna-kategoria, kolumna_podkat itd. potem nic nie kopiujesz jesli chcesz przeniesc miedzy kategoriami a jedynie zmieniasz wpis w polu w danej kolumnie.
Tak samo nie ma sensu uzywanie funkcji typu glob i innych skryptow cos tam generujacych z listy katalogu bo szkoda czasu. Skoro cos zostalo wprowadzone na serwer, to wszystkie dane sa juz znane i teraz zaleznie od koncepcji zapisujesz w tabeli bazy albo na plikach taka ilosc danych jaka uwazasz za stosowna np. w zaleznosci od wydajnosci. Czyli mozesz takze wkleic w baze rozmiar pliku, czas itp. Czytanie kazdorazowe struktury katalogowej przy masie plikow to strata czasu i pradu. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 0 Dołączył: 11.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Kombinujesz niepotrzebnie - strukturę generuje się automatycznie, zapoznaj się z funkcją glob. Skrypt automatycznie wygeneruje Ci menu i linki do plików na podstawie struktury i zawartości folderów - na forum i w sieci masz masę przykładów: listing plików, przeglądarka katalogów etc. Nie mogę struktury generować automatycznie pobierając katalog z plikami gdyż do publikacji muszę dodać również opis, a linki do pliku muszą mieć normalną nazwę, która zarazem jest linkiem. Tak więc oparcie na bazie danych to jedyne sensowne rozwiązanie. Wystarczy 1 tabela, w ktorej trzymasz dane plikow i przypisanie do kategorii - kolumna-kategoria, kolumna_podkat itd. potem nic nie kopiujesz jesli chcesz przeniesc miedzy kategoriami a jedynie zmieniasz wpis w polu w danej kolumnie. Tak samo nie ma sensu uzywanie funkcji typu glob i innych skryptow cos tam generujacych z listy katalogu bo szkoda czasu. Skoro cos zostalo wprowadzone na serwer, to wszystkie dane sa juz znane i teraz zaleznie od koncepcji zapisujesz w tabeli bazy albo na plikach taka ilosc danych jaka uwazasz za stosowna np. w zaleznosci od wydajnosci. Czyli mozesz takze wkleic w baze rozmiar pliku, czas itp. Czytanie kazdorazowe struktury katalogowej przy masie plikow to strata czasu i pradu. Czy mógł bym prosić o jakiś przykład wizualny? ![]() |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 181 Pomógł: 18 Dołączył: 19.04.2008 Ostrzeżenie: (10%) ![]() ![]() |
Tabela
(auto)id | index | nazwa pliku | grupa | kategoria | |data pliku | data upload | data ...itd | Czesc danych generuje sie automatycznie przy wrzucaniu pliku - rozmiar, daty itp Podczas lub po wrzuceniu na serwer uzytkownik ustala przynaleznosc do kategorii i inne parametry. Jesli "obrazek" ma miec tez inne wlasciwosci opisowe a _zalezne_ od jego kategorii - dopiero wtedy mozesz myslec o kolejnej tabeli posiadajacej adekwatne wlasciwosciom kolumny. Majac juz 1 wpis np: 01 | ... | ... | grupa=natura | kategoria=kwiatki | .... zmiana kategorii to zmiana wpisu w polach, zadnego kopiowania, glebszych zmian itp, pliki zostaja w swoim miejscu. Oczywiscie w tym konkretnym przykladzie, poniewaz inna koncepcja, zakladajaca inny uklad chociazby na dysku - spowodowany jakimis specyficznymi operacjami na plikach - moze wymoc inne sposob realizacji operacji na bazie. Z kolei np. | nazwa pliku | po pierwsze powinna byc generowana nowa dla pliku pracujacego na serwerze np. dla ulatwienia operacji dyskowych lub bezpieczenstwa a nie pozostawiana taka jak oryginalu, jesli nazwa oryginalu potrzebna mozna ja trzymac ale jako ceche opisowa a nie jako wlasciwosc od ktorej cos zalezy. Same nazwy mozesz generowac dla ulatwienia tak: prefNAM1099439661527b897052c1a gdzie powstaje ci struktura dyskowa: KATALOG nazwa: prefNAM1099439661527b897052c1a . .. plik_duzy(np. oryginal).jpg plik_mini.jpg plik_sredni.jpg co powoduje, ze kasujac wpis w bazie dla danego obrazka kasujesz wszystkie dane dotyczace pliku, jakie masz na dysku jedna operacja, bez szukania i grzebania sie. Dodatkowo optymalizujesz dzialanie Apache, ktory nie ma katalogu zapelnionego setkami plikow a jedynie podkatalogi z plikami, wielokrotna oszczednosc listowania struktury: zamiast [1000] plikow obrazkow i kazdy ma np. 5 podplikow, masz [200] - katalogow i tam grzebiesz. Budowa nazwy przykladowego katalogu: prefNAM1099439661527b897052c1a pref -prefiks kategorii NAM -czesc oryginalnej nazwy obrazka 1099439661527b897052c1a - indywidualny tzw. hash czyli ID plikowy dla katalogu. Nie bede wyjasnial co i po co, bo pewnie sam sie domyslisz, ze moze ci sie to do czegos przydac, bo wcale nie musisz sie kurczowo trzymac kazdego posdunietego tu pomyslu. Dla mnie one pracuja bo mam okreslona koncepcje. Ciekawa zaleta to fakt, ze podajesz do kazdego obrazka link http://..............plik_duzy.jpg ![]() Jedno z nich to fakt, ze osoba nieswiadomie robi zapis 10 fotek ze strony, a zapisala sie jedna bo kazda ma te sama nazwe. Jesli faktycznie chcesz zabezpieczac to polaczysz ten trik z kilkoma innymi i nie da rady zapisac obrazka inaczej jak tylko przez PrintScreen. (ale to znowu za szeroki temat ![]() no moze starczy na razie PS powyzsza struktura katalogu moze zawierac tez inne pliki zwiazane z obrazkiem np. zwiazane ze statystyka, dokumenty albo tez jakies elementy HTML itp. ale nie musi, tak samo jak nie musi byc w niej plikow miniatur i srednich bo jak masz superfast server to mozesz generowac np. dynamicznie miniatury albo pobierac je z z pliku poprzez EXIF itd itd. To temat na ladnych pare piw. Ten post edytował cbagov 20.05.2008, 13:10:02 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 0 Dołączył: 11.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Znalazłem taki temat:
http://forum.php.pl/index.php?showtopic=89...mp;hl=kategorie Chodzi mi głównie o to, że nie wiem kompletnie jak wyświetlić strukturę tabeli mając tak jak autor powyższego tematu podoobną budowe tabeli kategorii/podkategorii: Tabela category: | ID | NAZWA KATEGORI | PODKATEGORIA | ------------------------------------------------- | 1 | Kategoria 1 | 0 | | 2 | Kategoria 2 | 0 | | 3 | Kategoria 3 | 0 | | 4 | Podkategoria A | 2 | | 5 | Podkategoria B | 2 | | 6 | Podkategoria C | 3 | ------------------------------------------------- W jaki sposób to wyświetlić, męczę się od kilku dni ale już mnie flustracja dopada i powoli się poddaję.
W powyższym wylistowanie kategorii i podkategorii będzie wyglądać tak: # kategoria główna 1 # kategoria główna 2 # kategoria główna 3 # podkategoria A # podkategoria B # Podkategoria C A powinno wyglądać tak: # kategoria główna 1 # kategoria główna 2 # podkategoria A # podkategoria B # kategoria główna 3 # Podkategoria C Nie wiem jak to ruszyć dalej HELP ![]() Chyba sobie poradziłem.
Jak takie rozwiązanie ma się do wydajności i obciążenia bazy danych? Samych kategorii i podkategorii wiele nie będzie ale plikków zdaje się około 300-400. Ten post edytował hejkumkejkum 21.05.2008, 16:39:00 |
|
|
![]()
Post
#7
|
|
![]() Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Tworząc system kategorii warto zapoznać się z:
http://depesz.com/various/various-sqltrees.php oraz "metoda 5": http://depesz.com/various/various-sqltrees...lementation.php W sieci znajdziesz sporo rozwiązań dotyczących Nested Sets, które są dobrym rozwiązaniem, a na pewno lepszym niż proponowane w tym topicu metody. Oczywiście warto, jeśli planowane są później bardziej skomplikowane operacje na kategoriach. Pozdrawiam -------------------- To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness; chaotic, confused, vulnerability, to inform yourself. Think for yourself. Question authority. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 0 Dołączył: 11.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Cysiaczek wiesz najpierw chciałem się nauczyć podstawowego myślenia w związku z budowaniem takich tabel, pól, zanim przejdę do dalszej analizy i ewentualnej optymalizacji muszę poznać zasady.
Mam jeszcze prośbę o pomoc z zapytaniem. Męczę się na różne sposoby i JOIN i bez JOIN ale nijak mi tonie wychodzi. Czyli mam kod który wyświetla kategorie główne i podkategorie w postaci Kategoria gł1 podkategoriaA podkategoriaB Kategoriagł2 podkategoriaA kategoria gł3 Struktura bazy to: "category": id, Subcat, name -------------------- id to wiadomo, Subcat to wartość kategorii podkategorii (0 to kategoria główna), name to nazwa kategori lub subkategorii. oraz "file": id, category, name, url, addition -------------------- id wiadomo category to przyporządkowanie do id w tabeli (problem z zapytaniem) name to nazwa pliku/odnośnika url to ścieżka do ktorej został załadowany plik, addition (timestamp) to data dodania wpisu do bazy Samą strukturę kategorii i podkategorii wyświetlam na raize tak:
Proszę o pomoc z zapytaniem chodzi o to, że chcę wyświetlić to tak: Kategoria gł1 podkategoriaA podkategoriaB Wrzucony plik jeden, nazwa odnosnika blabla (data) Wrzucony plik dwa, nazwa odnosnika blabla (data) Kategoriagł2 podkategoriaA kategoria gł3 W zależności od tego do której kategorii, podkategorii przyporządkowany będzie plik z danymi. CODE SELECT * FROM category WHERE Subcat = '0' Wyświetla na razie tylko kategorie główne, jak zmodyfikować to zapytanie by do kategorii głównych (również do podkategorii w drugim zapytaniu) przyporządkowało dane z tabeli "file" ? PS. Czy jest jakiś darmowy generator zapytań, którym się można posiłkować? Pozdr. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.06.2025 - 00:52 |