mysql - 如何在 IF 子句中对 LIKE 使用 MATCH?(MySql)
问题描述
我想提高查询性能并针对 LIKE 使用 MATCH。
我的简化结构:
public:
- id (PRIMARY)
- title (FULLTEXT)
- ...
private
- id (PRIMARY)
- id_public (KEY)
- title (FULLTEXT)
- ...
我像这样添加了fullindex:
ALTER TABLE public ADD FULLTEXT INDEX idx_title (title);
ALTER TABLE private ADD FULLTEXT INDEX idx_title (title);
接下来我想更改我的查询,但并不简单。
在简单查询中,我已经更改了这样的查询。
从
SELECT COUNT(*) FROM public WHERE `title` LIKE '%XYZ%';
至
SELECT COUNT(*) FROM public WHERE MATCH(title) AGAINST ('XYZ');
但我对 JOIN 和 IF 有更具体的查询。如何在此查询 MATCH 中使用?
SELECT COUNT(*)
FROM public as public
LEFT JOIN private as private ON private.id_public = public.id
WHERE IF(private.title IS NULL, public.title, private.title) LIKE '%XYZ%'
我希望有人帮助我。我花了很多时间寻找解决方案,但一无所获。
解决方案
如果要求只匹配一个字段,那么这样的事情应该可以工作
SELECT COUNT(*)
FROM public as public
LEFT JOIN private as private ON private.id_public = public.id
WHERE
(private.title IS NOT NULL AND MATCH(private.title) AGAINST ('XYZ'))
OR
(private.title IS NULL AND MATCH(public.title) AGAINST ('XYZ'))
推荐阅读
- python - AWS Python Lambda 函数 - 将 UTF-8 编码的 CSV 写入 S3
- java - 哪个方法更快 ob.setText(""+int) 或 ob.setText(String.valueOf(int);
- excel - 在很多事情上需要帮助
- c# - 使用流读取器访问文件失败,因为它正被另一个进程使用
- javascript - 如何从 Javascript 函数中的 Promise 获得结果;
- c# - 我无法让我的 asp:Image "Visible" 属性值起作用,因此该元素是不可见的
- google-text-to-speech - 在 c# 中使用 [google-text-to-speech] v1Beta1 版本
- sql-server - 批量插入任务问题
- google-apps-script - Google 脚本 - 脚本超时
- slingr - 如何删除与实体相关的数据?| 吊索