Давайте рассмотрим, что вы используете mysql.
Что ж, ваш вопрос в основном: как написать запрос, который будет искать название отеля, продукты питания и местоположение отеля.
Я думаю, что эти 3 информации хранятся в 3 разных таблицах. Самый простой способ - просто запросить 3 таблицы одну за другой с помощью запроса, подобного тезисам:
SELECT * FROM hotel WHERE hotel_name LIKE "%foobar%";
SELECT * FROM hotel_food_item WHERE item_name LIKE "%foobar%";
SELECT * FROM hotel_location WHERE hotel_name LIKE "%foobar%" OR street_name LIKE "%foobar%" OR city LIKE "%foobar%";
- Убедитесь, что ваш поисковый запрос защищен от SQL-инъекций
- Вы можете (или нет) хотеть сгруппировать запрос в 1 больший запрос
Если ваша база данных становится большой (например, <100 000 строк на таблицу) или если у вас много или поисковый запрос, вас может заинтересовать создание <strong>поискового индекса или использование выделенная база данных предназначенная для текстового поиска, например упругого поиска или чего-то еще.
Edit:
Если актуальность имеет значение, используйте MATCH AGAINST
:
Вам нужно будет создать 3 подзапроса, которые выполняют MATCH AGAINST
, и они скомпилируют их вместе. Вы можете набрать AGAINST("foobar") as rank
, чтобы получить необходимый балл.
Это должно выглядеть так:
SELECT *
FROM
(
SELECT id, 'hotel' as table_name, MATCH (search_field1) AGAINST ("lorem") as rank FROM tableA
UNION
SELECT id, 'food' as table_name, MATCH (search_field2) AGAINST ("lorem") as rank FROM tableB
) as res
ORDER BY res.rank DESC