我将尝试以简单的方式解释它:
-我有一个表格"选举",每个选举都有一个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**
你大部分时间都在那里。 我唯一要做的就是在单个查询中选择包括行标识符在内的所有内容。
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 解析例程来拉出数组的成员。