![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 55 Pomógł: 0 Dołączył: 31.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Moje pytanie brzmi, jak zrobić taki fajny Tag Cloud jak na wiekszości stron webowo dwu-zerowych! Nie wiem jak zorganizować tabele, żeby szybko tego szukać. Założenia sa takie: - dwie tabele: newsy:[id][tytul][tresc][tagi] i tags:[tags]/[counter]/ - przy wpisywaniu newsa/arta/dodawaniu plików do downloadu bedzie input type:text gdzie bedą dodawane tagi oddzielone spacją. - przy dodawaniu wpisu do bazy najpierw bedą sprawdzane tagi (rozbite explodem) i sprawdzane, czy nie ma ich w tabeli "tags" - jeżeli danego tagu nie bedzie to zostanie dodany - możliwość wyświetlenia wystkiego co nawiązuje do danego tagu (LIKE %TAG%) No i dobra, wszystko ładnie pieknie do tego momentu problemu nie ma, tylko zastanawiam się jak to rozwiązać. czy zbudować tabele "tags": [tag][couner], czy wystarczy samo "tags":[tag]. Przy założeniu pierwszej opcji przy dodawaniu newsa, bedą sprawdzane tagi jeżeli istnieje to oczywiście $tags['counter']+1; przy kasowaniu -1 i wyświetlanie tagowej chmurki nie bedzie trudne. Druga opcja wydaje mi sie jednak bardziej elastyczna i mniej podatna na błędy (np. 2 osoby w tym samym czasie skasują dwa różne pliki które miały ten sam tag to mysql może się wysypać), tylko niestety nie wiem jak ten drugi sposób ogarnąć, czy brać pokolei while'm wszystkie tagi i zliczać je z drugiej tabeli (patrz. ostatni punkt założeń) - po czym wywali ilość rzeczy w tagu. Przy kilku takich wpisach to nie ma problemu, ale załóżmy, że w db zdążyło zgromadzić się 100.000 tagów i 50.000 newsów, które korzystają z nich, njak to ma się do wydajności MySQL'a? No chyba, że zna ktoś jeszcze inny sposób na robienie listy tagów. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 20.02.2007 Skąd: Wroclaw Ostrzeżenie: (0%) ![]() ![]() |
Przegladnij to http://prism-perfect.net/archive/php-tag-cloud-tutorial/
-------------------- -------------------------------------------
Racja jest jak dupa, kazdy ma swoja |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 55 Pomógł: 0 Dołączył: 31.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
OK, przeczytałem, przeanalizowałem i przykład zakłąda posiadanie jednego słowa kluczowego w kolumnie tags, a mi chodzi o coś takiego, że w tags mam kilka słów kluczowych oddzielonych spacją i jak teraz je posortować?
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 627 Pomógł: 33 Dołączył: 1.05.2005 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
tags:
------ tag_id|tag_name tags_rel: ---------- tag_id|item_id -------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 55 Pomógł: 0 Dołączył: 31.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
Takie coś wymyśliłem, ogólnie działa i jeszcze przez jakiś czas podziała - do momentu póki w db faktycznie nie będzie za dużo wpisów, bo arraye to lubią się mulić
![]() Opiera sie na dwóch tabelach, jedna z danymi, gdzie konieczna jest kolumna [tags] i druga tabela tags, gdzie jest tylko jedna kolumna [tag], nie jest konieczny [id] bo tag przecie sam w sobie jest id ;P Jak działa? Otóż wrzucamy wsio do arraya, są dwa, jeden to klucze drugi wartości, później łączymy tablice i sortujemy wg największych wielkości, ażeby wybrać określoną ilość najpopularniejszych tagów. pobieram info o tym ile jest max, a ile min dla tych tagów, na podstawie tego dobierana będzie wielkość tagów. I na koniec sortowanie wg kluczy (nazwy tagów), żeby ładnie w kolejności alfabetycznej wywalić na stronie... Może być, czy dzikość się wkradła?
--- EDIT --- Troche krócej, nie wiem czemu tak dookoła i po schodach pod górę krązyłem ![]()
Ten post edytował exseerius 24.07.2007, 19:45:15 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 627 Pomógł: 33 Dołączył: 1.05.2005 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
dramatyczne rozwiązanie, ile ty chcesz tych sqli namnożyć? :/
-------------------- |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 55 Pomógł: 0 Dołączył: 31.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
to czekam na inne rozwiązania... aczkolwiek jeszcze się zastanawaim nad drugą opcją...
![]() |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 627 Pomógł: 33 Dołączył: 1.05.2005 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
inne rozwiązania zostały podane wyżej.
twoje "rozwiązanie" robi conajmniej tyle sqli ile wyciaganych tagów. biorąc pod uwagę to, że np.moja kilkumiesieczna baza ma już blisko 1000 słów (i kilka tysiecy relacji) to twój kod robił by te tysiace sqli na reload ;D -------------------- |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 55 Pomógł: 0 Dołączył: 31.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
normanos przekonałeś mnie... Robie jednak na tabeli [tag][ilość_tagów_na_stronie]... Dzięki za uświadomienie, że nie ma sensu ciągłe sprawdzanie wszystkich rekordów, jeżeli np treść ulega zmianie jedynie raz na jakiś czas...
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 4.07.2025 - 20:29 |