我有一个包含“releases”和“releases_index”表的数据库。发布表中的每一行都有一个 ID,索引表包含与发布表中每一行相关的关键字。发布表的每一行都有多个关键字。
我正在尝试创建一个查询,该查询在索引表中搜索一个或多个关键字,并计算每个关键字有多少匹配项,然后按照从最佳匹配开始的匹配顺序返回结果。
这是我目前所拥有的:
import React, { useContext } from 'react';
const ParentComponent = () => {
const {showButton, setShowButton} = useContext(ButtonContext);
return (
<>
{showButton && (
<Button
onClick={() => {
// do your click stuff and
// reset the showButton context value
setShowButton(false)
}
}
>
</Button>)}
</>
)
}
这样做的问题是它只会返回 index_value 在同一行中同时包含 'apple' 和 'banana' 的结果,而如果相同的版本 ID 有单独的关键字用于 'apple' 和'香蕉'。
如果 index_releaseId 1 有两个关键字(apple 和banana),那么我希望得到这个结果:
SELECT index_releaseId, COUNT(1) as count FROM releases_index
WHERE index_value LIKE '%apple%' AND index_value LIKE '%banana%'
GROUP BY index_releaseId
ORDER BY count DESC
我希望我已经清楚地解释了这一点。本质上它只是一个搜索引擎。
谁能建议最好的方法?
更新: 这是我想要的一个更清晰的例子
说这是releases_index表:
index_releaseId count
1 2
如果在我的搜索引擎中搜索“猩红色女巫 wandavision”,则结果将是版本 ID 21956。尽管 21998 与一个短语匹配,但它不会是结果,因为它没有与 'scarlet' 或 'witch' 匹配的行。根据上面的查询,结果应该是这样的:
# index_id, index_releaseId, index_value
'435101', '21956', 'Scarlet Witch'
'435104', '21956', 'Television'
'435102', '21956', 'WandaVision'
'435109', '21998', 'WandaVision'
如果我只搜索“wandavision”,那么 21956 和 21998 都会是结果:
# index_releaseId, count
'21956', '2'
希望这能澄清我在寻找什么,但是,我发现很难解释。
答案 0 :(得分:0)
看看这个。现在我如果找到苹果就加 1,如果找到香蕉就加 1。 唯一的问题是,如果字符串中有更多的一次性苹果,我也只添加 1。
SELECT
index_releaseId,
SUM((index_value LIKE '%apple%') + (index_value LIKE '%banana%')) as count
FROM releases_index
WHERE index_value LIKE '%apple%' AND index_value LIKE '%banana%'
GROUP BY index_releaseId
ORDER BY count DESC;