Mar*_*unt 5 php mysql tags join categories
我是mysql领域的新手,我很难从数据库中获取所需的数据。
我有2张桌子...
结果
ID | TITLE | LOTS OF OTHER DATA |
1 | res1 | |
2 | res2 | |
3 | res3 | |
4 | res4 | |
5 | res5 | |
Run Code Online (Sandbox Code Playgroud)
分类目录
ID | RESULT_ID | CATEGORY NAME |
1 | 1 | purchase |
2 | 1 | single_family |
3 | 1 | conventional |
4 | 2 | usda |
5 | 3 | somecategory |
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个查询,该查询将选择属于该查询中提供的所有类别的结果。例如,在此示例中,对purchase&single_family和常规的查询将在结果表中返回第一个结果。
那有意义吗?是否存在可以执行此操作的查询,或者这与我的数据库结构有关?
非常感谢!
尝试这样的事情:
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
Run Code Online (Sandbox Code Playgroud)
带连接的基本选择只会为结果 1 获取三行。
编辑:为了确保您的代码在更改数据库时不会中断,您应该始终明确选择您想要的字段:SELECT r.ID, .. FROM ..
因此,您基本上是对所有类别的所有类别表进行简单的连接,其中类别名称是列表中的名称之一。尝试手动运行前 3 行以查看得到的结果。
接下来按结果 ID 进行分组。这意味着您将共享相同结果 id 的所有行聚合到一行中。最后一行意味着我们正在过滤由 3 行聚合的聚合列。这意味着您只会返回具有 3 个匹配类别的结果。
因此,此方法的唯一问题是您的类别表中是否有重复的 result_id、categoryname。