问题:
我想通过URL构建一个Query-Builder。返回是元组列表,包含参与者和参与者数据。在数据库中存在数百个具有唯一ID的参与者。每个参与者都可以拥有各种参与者数据。每个事件注册都在数据库中创建一个新的参与者数据,通过电子邮件与参与者相关联。
e.g.: include|eventid|is|17||include|eventid|is|13__include|unsubscribed|is|True
我将其分为AND和OR查询。
AND的
1. include|eventid|is|17||include|eventid|is|13 2. include|unsubscribed|is|True
OR的
From first AND Condition: 1. include|eventid|is|17 2. include|eventid|is|13
结果 - 语法:
[(participant_id, partidipantdata_id), (participant_id, partidipantdata_id), ...],
e.g: [(123,1240), (123,959), (123,1124), (123,1450), (134, 1670), (156,1950), (123,1450), (156,2000), (220,2100), (234, 1754), (156,1121), (278,1556), (281,1671), (278,1771), (156,2111), (312,2254), (289,967), (278, 2178)]
问题:
·如何正确组合(联合)OR-Queries(participant_id,participantdata_id)?
- >对各种事件的查询需要participant_id,对具有未订阅的各种事件(存储在参与者数据中的信息)的查询需要参与者数据_用于需要两者:participant_id和participantdata_id以获得最终结果查询。
问题:
例如。查询:事件#17和事件#13以及已从此事件取消订阅的所有ParticipantDatas。 (结果:3个查询:#13的参与者以及排除系统中某些事件的#17和alle参与者)。
所以我可以在17和13的participant_id之间进行交集。但是为了得到这个事件的所有unsubs,我必须进行事件#13的参与者数据的交集和事件#17和unsubs。但这不起作用,因为每次事件注册都会创建一个参与者的新参与者数据。访问#13和#17的参与者将不匹配。那就是问题所在!
·问题伴随着AND-Queries(与OR-Queries的结果相交)。
非常感谢! 克里斯
答案 0 :(得分:1)
为每个匹配的记录返回set
个UID。然后,您可以使用set
- 在union和intersection函数中构建的对象。
UID必须对每个可能的结果都是唯一的。在这种情况下,一个可能的结果是特定的参与者数据,它将由(参与者ID,参与者数据ID)唯一标识,因此您可以使用它,这意味着您只需返回set
而不是{{ 1}}。
元组不是这里最有效的数据类型,但我不认为这对你的情况很重要。