我会尝试以一种简单的方式解释它:
- 我有一个表“选举”,每个选举都有一个id和一些其他字段(例如数字票,开始日期等)。
- 我有一个表“候选人”,每个候选人都有一个“候选人选举”字段,这是对选举表的id字段的外部引用。简而言之:您可以选择编辑此字段的特定选举。
现在,我想创建一个表,每行都有类似的东西:
election id | election description | candidates (<select> <option> construct
每一行都有一个<select> <option>
滚动菜单,它包含特定选举的候选人。
现在,我的第一个想法是为每一行进行选择查询:
select id from candidates where election=row_id
但对我来说似乎效率低下:对于我创建的每一行,我都要进行查询。
有更好的方法吗?
示例:
选举:
id|end date | role
2 | 01/01/2012 | major
3 | 01/02/2012 | secretary
用户:
id| name |election
1 |donald | 2
2 |goofy | 2
3 |mickey | 3
现在是一个简单的html行:
01/01/2012 | major | **select/option choice with goofy and donald**
01/02/2012 | secretary| **select/option choice with just mickey**
答案 0 :(得分:1)
你大部分都在那里。我唯一要做的就是在一个查询中选择包括行标识符在内的所有内容。
select id from candidates where election=row_id
将替换为
select election, id from candidates where election in (row_id_1, row_id_2, etc);
现在你可以进一步这样做:
SELECT election, array_agg(id) from candidates
where election in (row_id_1, row_id_2, etc)
ORDER BY election
GROUP BY election;
然后,对于每次选举,您都会得到一系列候选人:{1, 3, 55}
如果剥离外部的括号,可以使用csv解析例程来拉出数组的成员。