Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyszukiwanie w bazie i autouzupełnianie
Chys
post 2.04.2009, 10:13:36
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
  1. CREATE TABLE `search_phrases` (
  2. `phrase_id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `phrase` varchar(255) NOT NULL,
  4. `count` int(11) UNSIGNED NOT NULL DEFAULT '1',
  5. PRIMARY KEY (`phrase_id`),
  6. UNIQUE KEY `phrase` (`phrase`)
  7. );


Tabela search_phrases_data
  1. CREATE TABLE `search_phrases_data` (
  2. `phrase_id` int(11) UNSIGNED NOT NULL,
  3. `foreign_name` varchar(256) NOT NULL,
  4. `foreign_id` int(11) UNSIGNED NOT NULL
  5. );


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.06.2025 - 20:55