A Person
可以有许多Degree
记录。hasMany关系的潜在复杂查询;这可以做到吗?
人
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| firstName | varchar(60) | NO | | NULL | |
| lastName | varchar(100) | NO | | NULL | |
+-----------+--------------+------+-----+---------+----------------+
度(编辑:我已经隐藏了简单许多额外的字段)
+----------+-------------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------------------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| personID | int(11) | NO | MUL | NULL | |
| type | enum('PhD','MSE','MEng','MA') | NO | | NULL | |
+----------+-------------------------------+------+-----+---------+----------------+
在网页中,我想展示的人,他们的名单学位信息(还有其他信息的学位除了他们的类型,我只是没有包括它,为简单起见)。我相信这必须在N + 1个查询中完成。首先,查询,选择有度所有的人:
SELECT DISTINCT person.id
FROM person
JOIN degree ON degree.personID = person.id
然后通过每个迭代的结果时,查询直接学位:
SELECT * FROM degree WHERE personID = :personID
然而,我的生活不是那么简单的。我有两个附加要求:
- 允许根据程度过滤页面。例如:“只显示'MA'度的人”,“只显示'MSE'度的人”。
- 如果该人不具有“博士”学位,则只显示'MA'度。
我正在努力如何将这些要求纳入查询。对于第一个要求,主查询需要事先知道用户拥有什么程度。我需要一个子查询吗?
规则还需要参与主查询(以及加载度数的第二个查询)。
只是一个小评论,这是列,而不是场... – jarlh
我只是复制从MySQL的'describe'命令 – Brian
哈哈输出,对不起......不知道他们有自己的条件... – jarlh