Я выполняю текстовый поиск по ключевым словам в статических записях в базе данных MySQL. Можно ли построить запрос, который находит первое ключевое слово в записи и второе ключевое слово в соседней записи? Рассмотрим следующие примеры данных.
------------------------------------------------------
| id | textstrings |
------------------------------------------------------
| 1 | Every good boy does fine. |
| 2 | The quick brown fox jumped over the lazy dog. |
| 3 | I will not eat green eggs and ham. |
| 4 | There is no time like the present. |
| 5 | Envy is an ugly shade of green. |
------------------------------------------------------
Поиск по терминам green brown
должен возвращать записи 2 и 3, поскольку они являются соседними записями, но не должен содержать запись 5, поскольку он не является соседом с записью 3.
Я знаю, что могу выполнить запрос для любого из слов и выполнить это путем обработки результирующего набора, но я хотел бы знать, возможно ли встраивать это в запрос.
Это поле имеет индекс FULLTEXT.
Вы можете объединить два запроса, один из которых будет искать идентификаторы, содержащие первую строку поиска (green
в этом примере), а другой, который будет искать идентификаторы, содержащие вторую строку поиска (brown
Вот).
SELECT
Оператор структурирован так, как он должен удалить дубликаты смежных id
пары, которые могут возникнуть в результате WHERE
пункт.
SELECT LEAST(t1.id, t2.id) AS id1, GREATEST(t1.id, t2.id) AS id2
FROM
(
SELECT id
FROM table
WHERE textstrings LIKE '%green%'
) t1
INNER JOIN
(
SELECT id
FROM table
WHERE textstrings LIKE '%brown%'
) t2
ON t1.id = t2.id - 1 OR t1.id = t2.id + 1
GROUP BY LEAST(t1.id, t2.id), GREATEST(t1.id, t2.id)
Нажмите на ссылку ниже для запуска демо.
Других решений пока нет …