微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我是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     |

我正在尝试创建一个查询,该查询将选择属于查询中提供的所有类别的结果.例如,购买和购买的查询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

带连接的基本选择将仅为结果1获取三行.

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

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

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

因此,这种方法的唯一问题是,如果您在Categories表中有重复的result_id,categoryname.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐