Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 1 Dołączył: 14.12.2004 Ostrzeżenie: (0%)
|
Witam.
Szukam jakis materialow na ten temat, ma ktos moze jakies niepotrzebne linki ? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Wiem tyle, ze musza byc 2 tabele: 1st (powiazania, np news 1st i wypisanie jego tagow, nastepny rekord, news 2nd i wypisanie jego tagow itp) id_news | tagi 2nd (lista zdefiniowanych tagow) tagi Jednak czy takie rozwiazanie jest optymalne? Watpie (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Z gory dzieki za wskazowki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 132 Pomógł: 0 Dołączył: 24.09.2003 Skąd: Giżycko / Wrocław Ostrzeżenie: (0%)
|
Pierwsze rozwiązanie, które przychodzi mi do głowy, to skorzystanie z jednej tabeli w bazie:
Kod +--------------------------+ + news_id | tagi + +--------------------------+ + 1 | ,html,css,php, + + 2 | ,xml,rss, + +--------------------------+ Parę słów nt. rozwiązania problemu tagów: w bazie trzymałbym listę tagów przypisanych konkretnej wiadomości oddzielonych przecinkami. Oczywiste jest, że tag nie może zawierać przecinka w swojej nazwie, bo rozwiązanie szlak trafi. Wyszukując wszystkie wiadomości np. o tagu "css", wystarczyłoby jedno zapytanie SQL:
Ważne jest, aby w kolumnie "tagi" lista zaczynała się i kończyła przecinkiem, gdyż inaczej pierwszy i ostatni tag z listy nie byłby przez powyższe zapytanie znajdowany. Co do wydajności powyższego rozwiązania: na pewno zapytanie SELECT ... LIKE nie jest najszybsze, lecz dla małych witryn o niewielkim obciążeniu bazy powinno wystarczyć. |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 7.09.2006 Skąd: Poznań Ostrzeżenie: (0%)
|
Może to nieco oczywiste, ale chyba o wieele szybsze, a prawdopodobnie tak samo przestrzeniożerne rozwiązanie, to trzy tabele:
1. newsy 2. tagi 3. relacja wiele-do-wielu newsów i tagów czyli newsy: news_id, tytuł, inne tagi: tag_id, nazwa taga, inne? newsy_tagi: news_id, tag_id (klucz główny z obu kolumn) Potem tylko prosty join
Engine bazy przy LIKE musi skanować kolumnę tagi wszystkich rekordów newsów, jakie są w tabeli, zatem wykonywać masę niepotrzebnej roboty. W tym rozwiązaniu, w najgorszym wypadku, będzie w prosty sposób sprawdzał wszystkie rekordy tagów, a tych pewnie będzie mniej i porównania prostsze. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Ten post edytował macbirdie 8.09.2006, 10:04:29 |
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 1 Dołączył: 14.12.2004 Ostrzeżenie: (0%)
|
z tym Joinem to chyba dobre rozwiazanie z punktu widzenia wydajnosci (zwlaszcza przy kilku tys newsow i kilkuset tagach) (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) dzieki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
|
![]() ![]() |
|
Aktualny czas: 23.12.2025 - 18:41 |