我有一个棘手的问题,我正试图找到最有效的方法来解决。
这是我的View结构的简化版本。
表:审核
AuditID | PublicationID | AuditEndDate | AuditStartDate 1 | 3 | 13/05/2010 | 01/01/2010 2 | 1 | 31/12/2009 | 01/10/2009 3 | 3 | 31/03/2010 | 01/01/2010 4 | 3 | 31/12/2009 | 01/10/2009 5 | 2 | 31/03/2010 | 01/01/2010 6 | 2 | 31/12/2009 | 01/10/2009 7 | 1 | 30/09/2009 | 01/01/2009
我需要3个查询。我需要一个来获取所有数据。接下来只获取历史数据(即,除了通过AuditEndDate排除最新数据项之外的所有内容),然后最后一个查询是获取最新数据项(通过AuditEndDate)。
我有一个额外的复杂层,我有一个日期限制(这是基于每个用户/组),某些用户组只能在某些日期之间查看。您会在where子句中注意到这一点,因为AuditEndDate< = blah和AuditStartDate> = blah
Foreach发布,选择所有可用数据。
select * from Audits
Where auditEndDate<='31/03/10' and AuditStartDate>='06/06/2009';
Foreach发布,选择所有数据但排除可用的最新数据(通过AuditEndDate)
select * from Audits
left join
(select AuditId as aid, publicationID as pid
and max(auditEndDate) as pend
from Audit where auditenddate <= '31/03/2009' /* user restrict */
group by pid) Ax
on Ax.pid=Audit.pubid
where pend!=Audits.auditenddate
AND auditEndDate<='31/03/10'
and AuditStartDate>='06/06/2009' /* user restrict */
Foreach发布,仅选择可用的最新数据(通过AuditEndDate)
select * from Audits
left join
(select AuditId as aid, publicationID as pid
and max(auditEndDate) as pend
from Audit where auditenddate <= '31/03/2009'/* user restrict */
group by pid) Ax
on Ax.pid=Audit.pubid
where pend=Audits.auditenddate
AND auditEndDate<='31/03/10'
and AuditStartDate>='06/06/2009' /* user restrict */
所以目前,查询1和3工作正常,但查询2只返回所有数据而不是限制。
任何人都可以帮助我吗?
由于
杰森
答案 0 :(得分:0)
好的,实际上......那些查询工作正常。这是我的条件PHP运行它们。 一切都很好:))
任何人都可以建议一个更有效的方法,虽然我有兴趣听到这个。我最初在where子句中使用了子查询,这个运行速度非常慢......从2秒开始它变为50秒....