MySQL поиск с расстоянием между соседними записями

Я выполняю текстовый поиск по ключевым словам в статических записях в базе данных 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.

4

Решение

Вы можете объединить два запроса, один из которых будет искать идентификаторы, содержащие первую строку поиска (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)

Нажмите на ссылку ниже для запуска демо.

SQLFiddle

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector