我需要根据客户输入选择带有optional columns
inwhere
子句的数据。我的查询是这样的:
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)