我有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。
答案 0 :(得分:1)
你需要另一个加入。尝试像
这样的东西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
。对于有问题的域来说,这可能更为真实,而连接命名与我们处理关系数据库的事实紧密相关。
答案 1 :(得分:-1)
SELECT temp.* FROM (
SELECT event.id as eventid,event.name as eventName ,event_categories_join.* FROM event AS event
INNER JOIN event_categories_join
ON event.eventid= event_categories_join.event_id
) AS temp
INNER JOIN category AS category ON
category.id =temp.category_id
WHERE category.name = 'Maeh'