我正在使用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列中搜索,则返回所有行。有这样的陈述吗?
答案 0 :(得分:0)
我建议如下:
SELECT * FROM emails
WHERE ...
AND ( CASE (SELECT COUNT(*) FROM emails WHERE body MATCH ?003)
WHEN 0 THEN 1
ELSE body MATCH ?003
END )
答案 1 :(得分:0)
我最终在运行时修改了SQL语句,将MATCH替换为LIKE'%'。不是很优雅,但它现在有效。