gpt4 book ai didi

php - MYSQL 获取分配给多个 "categories"的结果可能使用 JOIN?

转载 作者:可可西里 更新时间:2023-11-01 07:35:46 24 4
gpt4 key购买 nike

我是 mysql 世界的新手,我在从数据库中获取所需数据时遇到了一些问题。

我有 2 个表是...

结果

ID   | TITLE | LOTS OF OTHER DATA |
1 | res1 | |
2 | res2 | |
3 | res3 | |
4 | res4 | |
5 | res5 | |

类别

ID   | RESULT_ID |    CATEGORY NAME    |
1 | 1 | purchase |
2 | 1 | single_family |
3 | 1 | conventional |
4 | 2 | usda |
5 | 3 | somecategory |

我正在尝试创建一个查询,该查询将选择属于查询中提供的所有类别的结果。例如,本例中的 purchase & single_family & conventional 查询将返回结果表中的第一个结果。

这有意义吗?是否有查询可以执行此操作,或者这更多是我的数据库结构的问题?

非常感谢!

最佳答案

尝试这样的事情:

SELECT * FROM Results r 
INNER JOIN Categories c on r.ID = c.RESULT_ID
WHERE c.name in ('purchase', 'single_family', 'conventional')
GROUP BY r.ID
HAVING COUNT(c.ID) = 3

带连接的基本选择只会为结果 1 获取三行。

编辑:为确保您的代码在更改数据库时不会中断,您应该始终明确选择所需的字段:SELECT r.ID, .. FROM ..

因此,您基本上是对所有类别的所有类别表进行简单连接,其中类别名称是列表中的名称之一。尝试手动运行前 3 行以查看得到的结果。

接下来按结果 ID 分组。这意味着您将共享相同结果 ID 的所有行聚合到一行中。最后一行意味着我们正在过滤由 3 行聚合的聚合列。这意味着您只会返回具有 3 个匹配类别的结果。

所以这种方法的唯一问题是如果您的 Categories 表中有重复的 result_id、categoryname。

关于php - MYSQL 获取分配给多个 "categories"的结果可能使用 JOIN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10078555/

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