我有 2 个具有多对多关系的模型,event
和 category
。我正在尝试组合一个查询,让我按类别名称获取事件。
我有以下表格:
类别
id | name
事件
id | name
event_categories_join
category_id | event_id
我已经通过内部连接数据透视表成功地从类别 id 中获取了事件。
SELECT * FROM event
INNER JOIN event_categories_join
ON event.id = event_categories_join.event_id
WHERE event_categories_join.category_id = 5
如何通过名称而不是 ID 执行此操作?
编辑:
我分为三个类别,音乐会、复活节和演讲。我还有一个事件,伦敦语法,属于音乐会和复活节类别。现在我想编写一个查询,在其中提供类别的名称,并获取所属事件 - 在本例中为 Concert。
最佳答案
您需要另一个连接。尝试类似的东西
SELECT * FROM event
INNER JOIN event_categories_join ON event.id = event_categories_join.event_id
INNER JOIN category ON category.id = event_categories_join.category_id
WHERE category.name = 'my_category';
附带说明:您应该重新考虑将 event_categories_join 重命名为 event_categories
。或者可能是 event_categories_mapping
。这很可能更适用于所讨论的域,而连接命名与我们正在处理关系数据库的事实紧密相关。
关于mysql - 与连接表的多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29207426/