首页 > 解决方案 > 如何在 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%'

我希望有人帮助我。我花了很多时间寻找解决方案,但一无所获。

标签: mysqldatabase

解决方案


如果要求只匹配一个字段,那么这样的事情应该可以工作

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'))

推荐阅读