在多个连接的Rails中的高级查询
问题描述:
我有一张人的表格。我也有一个事件表;每个活动都有多个节目(每个节目有多张门票,每张门票可能有也可能没有买家(一个人),但每个人可以有多张门票可以参加不同的活动)在多个连接的Rails中的高级查询
我目前的尝试如下所示:
Person.joins(tickets: {shows: :events}).where("events.id" => 1)
它会生成以下SQL:
SELECT *
FROM "people"
INNER JOIN "tickets"
ON "tickets"."buyer_id" = "people"."id"
INNER JOIN "shows"
ON "shows"."id" = "tickets"."show_id"
INNER JOIN "events"
ON "events"."id" = "shows"."event_id"
WHERE
"events"."id" = 1;
但我的理解是,查询只会返回一个票每个人,我不知道我的加入是很好,但将它。假设我需要一个正确的外连接是安全的人员和门票,以显示每张门票(并因此表示每个事件)。它是否正确?我该如何在ActiveRecord/Arel中实现THAT?
如何找到所有有特定活动门票的人?
答
我也没有一个DB专家,但据我了解,这是它的方式将工作:
- 人民内部联接门票会给你一排资 每票由人(其中将包含重复的条目的人,如果一个人有一个以上的票)
- 内连接显示将只需添加秀行 (假设每票属于一个节目只)
- 内部联接事件将只需要添加的事件信息(假设每显示仅属于一个事件)
- 其中event.id = 1将在表仅留下与事件ID的行1
我认为这是你要找的。
顺便说一句,上述代码中的命名约定表明您可能在关系定义时遇到问题。我希望它是:
Person.joins(tickets: {show: :event})
,而不是
Person.joins(tickets: {shows: :events})
因为票belongs_to的一支独秀,并显示belongs_to的单个事件。我错过了什么吗?
+0
就是这样。我没有想到人们会乘上那些门票的数量,但那是我寻找的结果。查询正在运行,谢谢! – Judy 2012-07-18 19:37:51
此查询实际上会返回人员而不是门票。你能否澄清你的目标? – davidrac 2012-07-10 16:04:16
我想找到所有有特定活动门票的人。 – Judy 2012-07-10 16:10:13
所以我认为你的查询应该做的伎俩。当一个人拥有多张票时,你是否期望有所不同? – davidrac 2012-07-10 16:23:04