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
CREATE TABLE `search_phrases` ( `phrase_id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, `phrase` varchar(255) NOT NULL, `count` int(11) UNSIGNED NOT NULL DEFAULT '1', PRIMARY KEY (`phrase_id`), UNIQUE KEY `phrase` (`phrase`) );
Tabela search_phrases_data
CREATE TABLE `search_phrases_data` ( `phrase_id` int(11) UNSIGNED NOT NULL, `foreign_name` varchar(256) NOT NULL, `foreign_id` int(11) UNSIGNED NOT NULL );
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.