gpt4 book ai didi

mysql - 困难的 MySQL 问题(关系和多行)

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

我有一个困难的 mysql 问题。我有一个将关键字与案例相匹配的数据库,经过简化:

TABLE cases (id)
TABLE keywords (id)
TABLE cases_keywords (case, keyword)

所以我可以有带有关键字 Y 和 Z 的情况 A,也可以有带有关键字 X 和 Y 的情况 B。这在 case_keywords 中给出了四行:

(A, Y)
(A, Z)
(B, X)
(B, Y)

问题:

我的网站上有一个搜索功能,用户可以输入关键字进行搜索。我希望当找到所有关键字时结果显示匹配项。因此,当用户输入 Y 和 Z 作为关键字时,只会出现情况 A(因为情况 B 没有关键字 Z)。但是,当用户仅提供 Y 作为关键字时,网站会同时显示 A 和 B(因为它们都获得了关键字 Y)。

所以我知道查询是通过 PHP 动态进行的,最大的问题是匹配多个关键字...假设我想匹配 2 个关键字:Y 和 Z,结果为:case A。

如何将其编程为查询?如何匹配多行?

SELECT C.id FROM cases C JOIN cases_keywords CK ON CK.case = C.id WHERE CK.keyword = Y AND CK.keyword = Z

上面不起作用,所以我尝试了 WHERE C.case IN () 的一些东西,但我也被困在那里......

谁能帮帮我

最佳答案

这里有 2 个建议。

第一个必须动态构建,效率不会那么高,但很容易理解。

SELECT C.id 
FROM cases C
JOIN cases_keywords CK1 ON CK1.case = C.id AND CK1.keyword = Y
JOIN cases_keywords CK2 ON CK2.case = C.id AND CK2.keyword = Z

更高效并且可以非动态构建:-

SELECT C.id, COUNT(CK.keyword) AS KeywordCount
FROM cases C
JOIN cases_keywords CK ON CK.case = C.id
WHERE CK.keyword IN ('Y', 'Z')
GROUP BY C.id
HAVING KeywordCount = 2

关于mysql - 困难的 MySQL 问题(关系和多行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21454006/

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