我有一个困难的 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/