Как можно реализовать SQL запрос для поиска по двум столбцам одновременно с исключением некоторых столбцов из поиска?

Имеется БД SQLite, а в ней заполненная таблица(data) FTS5 со столбцами: a, b, c
Содержимое таблицы для примера:
a|b|c
Что АБЫРВАЛГ может|ГЛАВРЫБА|Тузик

Мне необходимо осуществить поиск ТОЛЬКО по столбцам 'a' и 'b', при этом в запросе должен присутствовать и столбец 'с'.
Если использую запрос:
$stmt = $db->prepare("SELECT a, b, c FROM data WHERE data MATCH 'a:$fullQuery OR b:$fullQuery' ORDER BY id DESC LIMIT 5");
$stmt->bindValue(':fullQuery',$fullQuery, SQLITE3_TEXT);

Так он ищет по столбцам 'a', 'b' и 'c'
Например, введя запрос: "Что ГЛАВРЫБА может" - результат: "Что АБЫРВАЛГ может"
но результат даст и запрос: "Что Тузик может" - результат: "Что АБЫРВАЛГ может"

Если же исключаю столбец 'c':
SELECT a, b, c FROM data WHERE (a MATCH '{$fullQuery}' OR b MATCH '{$fullQuery}') ORDER BY id DESC LIMIT 5");

то как и требовалось, столбец 'c' не задействуется в поиске, но и не происходит поиск одновременно по столбцам 'a', 'b'. Либо по 'a,' либо по 'b'.
Например, введя запрос: "Что ГЛАВРЫБА может" - не даст результата, а дает результат только "Что АБЫРВАЛГ может" или "ГЛАВРЫБА".

Требуется, что бы работал такой запрос: "Что ГЛАВРЫБА может" - результат: "Что АБЫРВАЛГ может"(без участия в поиске столбца 'c' )
  • Вопрос задан
  • 174 просмотра
Пригласить эксперта
Ответы на вопрос 1
Azamat_Lee
@Azamat_Lee
Работаю с Wordpress
Для выполнения поиска по двум столбцам в SQLite с использованием FTS5 и исключением одного столбца из поиска, вы можете использовать следующий запрос:

SELECT a, b, c FROM data WHERE data MATCH 'a:$fullQuery OR b:$fullQuery' AND NOT c:$fullQuery;


этом запросе используется оператор MATCH для поиска по столбцам a и b с использованием переменной $fullQuery. Оператор AND NOT исключает результаты, где столбец c также соответствует запросу $fullQuery.

Таким образом, если $fullQuery содержит “Что ГЛАВРЫБА может”, запрос вернет строки, где a или b содержат эту фразу, но c не содержит её. Это позволит вам исключить столбец c из поиска, но при этом включить его в выводимые результаты. Пожалуйста, убедитесь, что ваш запрос корректно обрабатывает специальные символы и пробелы в $fullQuery.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы