Php MYSQL获取分配给多个“的结果”;类别“;也许用JOIN?

Php MYSQL获取分配给多个“的结果”;类别“;也许用JOIN?,php,mysql,join,tags,categories,Php,Mysql,Join,Tags,Categories,我是mysql的新手,在从数据库获取所需数据时遇到了一些问题 我有两张桌子 结果 ID | TITLE | LOTS OF OTHER DATA | 1 | res1 | | 2 | res2 | | 3 | res3 | | 4 | res4 | | 5 | res5 |

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

我有两张桌子

结果

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     |
类别

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&Conventive的查询将返回结果表中的第一个结果

这有意义吗?是否有一个查询可以做到这一点,或者这更像是我的数据库结构的问题


非常感谢

试试这样的方法:

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 with join将只获得三行

编辑:为确保更改数据库时代码不会中断,应始终明确选择所需字段:
select r.ID。。从..

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

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


因此,这种方法唯一的问题是,如果您的Categories表中有重复的result\u id、categoryname。

就返回正确的结果而言,这非常有效!但是,id列似乎正在被类别的id列重新定距。因此,当我试图通过在php中获取$row->id来构建链接时,它使用的是类别id。有什么想法吗?还有,你介意逐行给我解释一下代码吗?非常感谢你的帮助!!非常感谢:D嘿,也许你也可以帮我看看这个?