我有一个表 InnoDB,其中包含 id(int)、name(varchar) 和 info(text) 列。我需要使用给定的术语搜索表的名称和信息列,并根据每条记录组合的两列中的“命中”数从高到低排列匹配记录。
我已经搜索过了,但我以前从来没有用 MySQL 做过这样的事情,发现这一切有点令人困惑......大小写和匹配等等等。
谁能提供一些快速帮助?
这是据我所知:
SELECT count(*) as count
FROM artistmanager_artists WHERE
case when 'name' LIKE '%a%' then 1 else 0 end
+ case when 'info' LIKE '%a%' then 1 else 0 end
ORDER BY count ASC
(“a”是搜索词)
它返回一行和一列,'count',值为三......我猜这是因为我在 mo 的表中有三条记录?
我也发现并尝试了这个:
SELECT *
FROM `artistmanager_artists`
WHERE `name` LIKE '%a%'
AND (
`info` LIKE '%a%'
)
ORDER BY (
(
CASE WHEN `name` LIKE '%a%'
THEN 1
ELSE 0
END
) + (
CASE WHEN `info` LIKE '%a%'
THEN 1
ELSE 0
END
)
) DESC
这返回了除了一条记录之外的所有记录,没有明显的顺序,当我知道它没有返回的记录包含很多“a”时!