Использование подготовленных операторов и полнотекстового поиска в SQLite - PullRequest
0 голосов
/ 07 февраля 2011

Я использую интерфейс SQLite C для написания приложения. Поскольку мне нравится безопасность, я использую подготовленные операторы для запроса базы данных. В одном из таких запросов я выбираю строки из виртуальной базы данных, используя ключевое слово MATCH для полнотекстового поиска. Вот пример:

SELECT * FROM Emails
WHERE ( Subject LIKE ?001 OR ?001 IS NULL )
  AND ( Author LIKE ?002 OR ?002 IS NULL )
  AND ( Body MATCH ?003 OR ?003 IS NULL )

Это позволяет пользователю вводить любые термины (Тема, Автор или Тело) по отдельности или в любой комбинации для выполнения поиска. Любой термин, который не введен, я буду связывать NULL с этим параметром. Проблема с этим утверждением состоит в том, что вы не можете использовать ключевое слово OR с ключевым словом MATCH. Я ищу оператор, который можно использовать с ключевым словом MATCH, чтобы вернуть все строки, если не выполняется поиск в столбце Body. Есть ли такое утверждение?

Ответы [ 2 ]

0 голосов
/ 10 февраля 2011

Я закончил тем, что изменил инструкцию SQL во время выполнения, чтобы заменить MATCH на LIKE '%'.Не очень элегантно, но пока работает.

0 голосов
/ 07 февраля 2011

Я предлагаю следующее:

SELECT * FROM emails
WHERE ...
  AND ( CASE (SELECT COUNT(*) FROM emails WHERE body MATCH ?003)
        WHEN 0 THEN 1
        ELSE body MATCH ?003
         END )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...