我需要根据客户输入选择带有optional columnsinwhere子句的数据。我的查询是这样的:
SELECT a.id, a.title, b.txt AS b_txt, c.txt AS c_txt
FROM a
LEFT JOIN b ON a.b_id=b.id
LEFT JOIN c ON a.c_id=c.id
where a.status=1
AND (0=@bid OR a.b_id=@bid)
AND (0=@cid OR a.c_id=@cid)
Run Code Online (Sandbox Code Playgroud)
@bid并且@cid是客户端输入,如果客户端不提供输入,则这些值必须>0使用默认值0。
客户端可以不提供任何输入,因此它将选择status=1忽略b_id和c_id列的所有数据
客户可以提供@bid或提供@cid两者,查询将相应地选择。
表引擎是 InnoDB,列有索引,外键和关系集。
到目前为止一切都很好。EXPLAIN SQL显示选择是根据提供的索引完成的。
现在我需要在所有 3 个表上添加全文搜索来查询是我遇到问题的地方。如果客户端提供任何关键字进行搜索,文本搜索也是可选的。
全文索引定义为 a.title、b.txt 和 c.txt
我将查询更改为:
SELECT a.id, a.title, b.txt AS b_txt, c.txt AS c_txt …Run Code Online (Sandbox Code Playgroud)