![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 9.11.2003 Ostrzeżenie: (0%) ![]() ![]() |
Chcialbym stworzyc system slow kluczowych w stylu np. youtube.com, pudelek.pl (moj faworyt:P) i wielu wielu innych sajtow - duzo sie tego porobilo. W skrocie chce takiej funkcjonalnosci, zeby artykuly mialy przypisywane recznie slowa kluczowe i aby potem na podstawie slow kluczowych wyszukiwac artykuly podobne, tworzyc indeksy wszystkich artykulow z przypisanym danym slowem etc.
Platforma to mysql. Jaka strukture bazy slow kluczowych wybrac? Czy do kazdego artykulu robic jedno pole tekstowe po prostu z oddzielonymi spacjami keywordami i stworzyc na tym polu indeks fulltext, czy tez raczej zrobic wielka baze relacji id|slowo|artykul, czyli np. dla artykulu o ID 15 rekordy: Kod id | slowo | artykul ---+-----------+--------- 11 | pieniądze | 66 12 | biznes | 66 13 | waluta | 66 14 | dulary | 66 Nieee wiem czy to nie powinno trafic do dzialu o mySQL, ale to nie jest tylko kwestia bazy - chodzi mi rowniez o to jak na platformie php potem w sposob wygodny i wydajny to obslugiwac. |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 ![]() |
Możesz stworzyć w bazie tabelę o następujących polach:
- idkeyword (int) - idarticle (int) - skeywords (text) W polu keywords przechowujesz słowa kluczowe w następującej formie: ;slowo1;slowo2;slowo3; itd. Aby sprawdzić czy szukane przez użytkownika słowo jest przypisane do danego artykułu w zapytaniu SQL uzywasz like.
W zmiennej $zmienna zawiera szukane słowo. -------------------- I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features. |
|
|
![]()
Post
#3
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
3 standardowe tabele dla relacji wiele do wielu (tagi, artykuly, artykuly_tagi (
![]() Przenosze na MySQL, bo jest to kwestia zaprojektowania bazy danych -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
3 standardowe tabele dla relacji wiele do wielu (tagi, artykuly, artykuly_tagi ( ![]() Przenosze na MySQL, bo jest to kwestia zaprojektowania bazy danych Co byś trzymał w poszczegolnych tabelach? -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
![]()
Post
#5
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
googlenie boli: http://www.google.com/search?hs=aaw&hl...=Szukaj&lr=
-------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
googlenie boli: http://www.google.com/search?hs=aaw&hl...=Szukaj&lr= Nie boli. Nie pytam się co to jest i jak działa relacja jeden do wielu, tylko jakbyś te tabele zaprojektował. -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 9.11.2003 Ostrzeżenie: (0%) ![]() ![]() |
W polu keywords przechowujesz słowa kluczowe w następującej formie: ;slowo1;slowo2;slowo3; itd. Aby sprawdzić czy szukane przez użytkownika słowo jest przypisane do danego artykułu w zapytaniu SQL uzywasz like. Like to zabojstwo, to chyba nie jest droga - juz lepiej fulltext ![]() dr_bonzo Brzmi logicznie, to powinno byc najwydajniejsze rozwiazanie. Fulltext jest chyba prostszy do wdrozenia, ale napewno proste indeksy na INT beda wydajniejsze no i oszczedzimy sporo miejsca. Dzieki. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Like to zabojstwo, to chyba nie jest droga - juz lepiej fulltext ![]() dr_bonzo Brzmi logicznie, to powinno byc najwydajniejsze rozwiazanie. Fulltext jest chyba prostszy do wdrozenia, ale napewno proste indeksy na INT beda wydajniejsze no i oszczedzimy sporo miejsca. Dzieki. Na jakiej podstawie piszesz, że like to zabójstwo. Co ma wspólnego like z fulltext? -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 9.11.2003 Ostrzeżenie: (0%) ![]() ![]() |
Zapytanie w stylu
przy obciazeniu kilkuset zapytan na minute przy bazie powiedzmy 20k rekordow zabije najpotezniejszy serwer. Tworzac na polu keywords indeks fulltext i szukajac potem po tym indeksie mozna to robic na przyslowiowym celeronie. Zapytania po indeksach zawsze beda wydajniejsze, funkcja LIKE musi przeczesac wszystkie rekordy. |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Zapytanie w stylu przy obciazeniu kilkuset zapytan na minute przy bazie powiedzmy 20k rekordow zabije najpotezniejszy serwer. Tworzac na polu keywords indeks fulltext i szukajac potem po tym indeksie mozna to robic na przyslowiowym celeronie. Zapytania po indeksach zawsze beda wydajniejsze, funkcja LIKE musi przeczesac wszystkie rekordy. Ok. Załóżmy, że masz książke telefoniczną. Wyszukujesz po imieniu, nazwisku, dziale czy stanowisku pracy. Chciałbyś, żeby użytkownik nie musiał wpisywać całej nazwy działu czy stanowiska tylko napisał np. dzial k a system odnajdzie mu wszystkie telefonu które pasują do tego wyrażenia, np. Dział Kadr, Dział Kontroli, Dział K... itd. Jak to zrobisz bez LIKE ? -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 9.11.2003 Ostrzeżenie: (0%) ![]() ![]() |
Ok. Załóżmy, że masz książke telefoniczną. Wyszukujesz po imieniu, nazwisku, dziale czy stanowisku pracy. Chciałbyś, żeby użytkownik nie musiał wpisywać całej nazwy działu czy stanowiska tylko napisał np. dzial k a system odnajdzie mu wszystkie telefonu które pasują do tego wyrażenia, np. Dział Kadr, Dział Kontroli, Dział K... itd. Jak to zrobisz bez LIKE ? Po pierwsze, to jest zupelnie inny problem ![]() Po drugie, wyszukiwanie FULLTEXT w MySQL ma mozliwosc dopelnienia ![]()
Tylko ze nie wiem, czy w tym wypadku przewaga wydajnosciowa nad LIKE jest tak ogromna jak przy zwyklym "serczu". Ale zachecam do stosowania indeksow fulltext, moze oszczedzic wymiany sprzetu kiedy wszystko przestaje dzialac ![]() |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 1 190 Pomógł: 27 Dołączył: 23.04.2005 Ostrzeżenie: (0%) ![]() ![]() |
Po pierwsze, to jest zupelnie inny problem ![]() Po drugie, wyszukiwanie FULLTEXT w MySQL ma mozliwosc dopelnienia ![]()
Tylko ze nie wiem, czy w tym wypadku przewaga wydajnosciowa nad LIKE jest tak ogromna jak przy zwyklym "serczu". Ale zachecam do stosowania indeksow fulltext, moze oszczedzic wymiany sprzetu kiedy wszystko przestaje dzialac ![]() Gdzie znajde (dobrze byłoby po polsku) jakieś szczegóły o tajemniczym FULLTEXT? ![]() -------------------- ”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335) |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 9.11.2003 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 22:28 |