gpt4 book ai didi

mysql - SQL选择与给定列的多个单词匹配的记录

转载 作者:行者123 更新时间:2023-11-29 00:00:23 25 4
gpt4 key购买 nike

假设我有一个表格,其中列出了一些带有 title

列的项目

现在给定一个标题为“AAA BBB CCC DDD”的项目,我想检索所有至少有 n-1 个匹配词的项目。

目前我正在生成 n-1 单词的所有组合(php 端),然后使用 LIKE 进行匹配,所以像这样:

SELECT
`e`.`title`
FROM `items` AS `e`
WHERE ((
(e.title LIKE '%AAA%' AND e.title LIKE '%BBB%' AND e.title LIKE '%CCC%') OR
(e.title LIKE '%AAA%' AND e.title LIKE '%BBB%' AND e.title LIKE '%DDD%') OR
(e.title LIKE '%AAA%' AND e.title LIKE '%CCC%' AND e.title LIKE '%DDD%') OR
(e.title LIKE '%BBB%' AND e.title LIKE '%CCC%' AND e.title LIKE '%DDD%')))

问题

  • 我远不是 SQL 高手 :) 是否有比上述示例更好的方法?

  • 一个额外的要求是搜索包含 n-2 个词的项目,以防找不到包含 n-1 的项目。我的想法是找到所有具有 n-1n-2 直到 2 的匹配项目,并且在结果集中有一个包含匹配单词数量的动态列,因此顺序根据这个分数得出结果,可能吗?

额外信息:

  • 我无法更改表结构/属性。 (我会打破系统的“一致性”,因为我在 Magento 上,所以对于“项目”,我指的是产品)

  • 标题实际上在一个单独的表上,所以在真实场景中它在一个连接表上

最佳答案

它不会很快但是像这样:

SELECT
`e`.`title`, count(*)
FROM `items` AS `e`
inner join
(select 'AAA' as search union all select 'BBB' union all select 'CCC') as z
on `e`.`title` like concat('%',`z`.`search`,'%')
group by `e`.`title`
order by COUNT(*) desc

我不是 MySQL 专家,所以您可能需要稍微研究一下。此外,如果标题不是唯一的,则按主键和标题选择并分组。

如果您的搜索参数已经在表格中,那很好 - 您不必再次选择它们。

我认为这并没有完全解决您的问题,但我希望它能帮助您实现目标。

关于mysql - SQL选择与给定列的多个单词匹配的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30092021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com