【发布时间】:2021-04-04 19:56:03
【问题描述】:
我有一个包含“releases”和“releases_index”表的数据库。发布表中的每一行都有一个ID,索引表包含与发布表的每一行相关的关键字。发布表的每一行都有多个关键字。
我正在尝试创建一个查询,该查询在索引表中搜索一个或多个关键字,并计算每个关键字有多少匹配项,以从最佳匹配开始的匹配顺序返回结果。
这是我目前所拥有的:
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
这样做的问题是它只会返回 index_value 在同一行中同时具有“apple”和“banana”的结果,而如果相同的发布 ID 具有单独的关键字“apple”和'香蕉'。
如果 index_releaseId 1 有两个关键字(苹果和香蕉),那么我希望得到这个结果:
index_releaseId count
1 2
我希望我已经清楚地解释了这一点。本质上它只是一个搜索引擎。
谁能建议最好的方法?
更新: 这是我想要的一个希望更清晰的示例
说这是releases_index表:
# index_id, index_releaseId, index_value
'435101', '21956', 'Scarlet Witch'
'435104', '21956', 'Television'
'435102', '21956', 'WandaVision'
'435109', '21998', 'WandaVision'
如果我在我的搜索引擎中搜索“猩红女巫 wandavision”,则结果为发布 ID 21956。尽管 21998 在一个短语上匹配,但它不会是结果,因为它没有匹配 'scarlet' 或 'witch' 的行。根据上面的查询,结果应该是这样的:
# index_releaseId, count
'21956', '2'
如果我只搜索“wandavision”,则 21956 和 21998 都会得到结果:
# index_releaseId, count
'21956', '1'
'21998', '1'
希望这能澄清我在寻找什么,但是,我发现很难解释。
【问题讨论】:
-
index_value能否连续同时为同一个苹果和香蕉,请加个minimal reproducible example
-
我想是这样 - 不完全确定你的意思
-
您选择的每一行都必须有 index_value apple 和banana,否则不会选择 iz,所以请向我们展示示例数据和想要的 rsult,以便我们为您提供帮助跨度>
-
@Josh,this answer 你在找什么?
-
@Eugene 我不这么认为我害怕
标签: mysql