![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 34 Pomógł: 0 Dołączył: 12.04.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Robię wyszukiwanie oparte na autouzupełnianiu, polegające na tym, że przy wstawianiu czegokolwiek (newsy, artykuły) są one dzielone na pojedyncze wyrazy, a następnie dane te (jaki wyraz gdzie występuje) są wstawiane do bazy. Tabela search_phrases
Tabela search_phrases_data
Jeśli dla przykładu wstawiam do bazy newsa o id 5 i występują w nim wyrazy takie jak "dom", "samochód", "ogród" to w wypadku nie występowania tych wyrażeń wcześniej w bazie zostaną dodane nowe rekordy to tabeli search_phrases, jeśli natomiast były już one w tej tabeli to pole count zostanie zwiększone o 1. Prócz tego do tabeli search_phrases_data dodam rekordy ustawiając w nich pola foreign_name na "news", foreign_id na "5" oraz phrase_id na id tych trzech wyrazów. Dzięki temu korzystając z autouzupełniania podczas wpisywania liter nie muszę przeszukiwać całej bazy danych pod kątem szukanej frazy tylko używam LIKE dla sprawdzenia wartości w tabeli search_phrases oraz od razu mogę zwrócić ilość ile dane wyrażenie występuje. Problem pojawia się w tedy, gdy wpisuję dwa wyrazy, np "dom" i "ogród". Nie wiem jak sformułować zapytanie, które pobrało by wszystkie rekordy z tabeli search_phrases, tak aby foreign_id oraz foreign_id w tabeli search_phrases_data były takie same i oczywiście odpowiadały im pola phrase_id w obydwu tabelach. Mówiąc krótko; chcę sprawdzić w jakich miejscach występują obydwa (lub oczywiście więcej, jeśli użytkownik wpisze więcej wyrazów) wyrazy. Z góry dziękuję za każdą pomoc. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 27.06.2025 - 20:55 |