MYSQL可能使用JOIN获得分配给多个“类别”的结果?

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和常规的查询将在结果表中返回第一个结果。

那有意义吗?是否存在可以执行此操作的查询,或者这与我的数据库结构有关?

非常感谢!

bar*_*sju 3

尝试这样的事情:

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。