gpt4 book ai didi

mysql - 对两个表执行 AND 串联搜索

转载 作者:行者123 更新时间:2023-11-29 12:35:17 26 4
gpt4 key购买 nike

我有两张 table

#keywords
content_id | keyword
-----------+----------
2 | lorem
6 | loremsis
6 | ipsum
6 | dolor

#tags
content_id | tag
-----------+----------
2 | amet
6 | lorem
6 | amet

注意,这两个表不能合并为一个表。我想使用 AND 连接和右侧 LIKE 运算符执行搜索。目前,对此的声明如下:

SELECT content_id FROM (

SELECT content_id FROM store_keywords
WHERE keyword LIKE 'lorem%' OR keyword LIKE 'ipsum%'

UNION ALL

SELECT content_id FROM store_tags
WHERE tag LIKE 'lorem%' OR tag LIKE 'ipsum%'

) s1
GROUP BY content_id
HAVING COUNT(*)='2'

那么搜索“lorem ipsum”时我们会得到什么?

#keywords
content_id | keyword
-----------+----------
2 | lorem
6 | loremsis
6 | ipsum

#tags
content_id | tag
-----------+----------
6 | lorem

这不适合 HAVING COUNT(*)='2',可以使用 >='2' 修复。因此返回 ID 6,因为它包含这两个术语。但是当搜索“lorem odem”时,我们得到

#keywords
content_id | keyword
-----------+----------
2 | lorem
6 | loremsis

#tags
content_id | tag
-----------+----------
6 | lorem

符合HAVING子句,但不包含术语“odem”的任何结果。

那么,有没有人有一种方法可以满足以下要求:

  • 必须找到搜索词的所有字词(AND串联搜索)
  • 搜索在两个表上执行,可以在两个表中都包含双元组和匹配项,但也可以仅在一个表中

最佳答案

仍然无法理解您的描述,但查看您的项目,您可能想要

获取 content_id,其中包含搜索字符串中的两个单词,无论是在关键字还是标签中

正确吗?

那么你需要这个查询:

SELECT distinct t1.content_id FROM
(
SELECT content_id FROM store_keywords
WHERE keyword LIKE 'lorem%'
UNION
SELECT content_id FROM store_tags
WHERE tag LIKE 'lorem%'
) t1
INNER JOIN
(
SELECT content_id FROM store_keywords
WHERE keyword LIKE 'ipsum%'
UNION
SELECT content_id FROM store_tags
WHERE tag LIKE 'ipsum%'
) t2
ON t1.content_id = t2.content_id

关于mysql - 对两个表执行 AND 串联搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26883385/

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