Ale*_*ove 6 php mysql silverstripe
我正在制作一份Silverstripe自定义报告,该报告是在我现任雇主之前创建的.该报告返回CompetitionEntry特定的行Competition以及竞赛的标题(以及我已删除的其他几个字段以保持代码片段整洁).
当我们尝试导出10,000或更多结果时,它会超时.MySQL通用日志显示每次竞争条目时,查询运行每次都在查找比赛:
SELECT DISTINCT Created, LastEdited, URLSegment, Title, MenuTitle, Content, MetaDescription, ExtraMeta, ShowInMenus, ShowInSearch, Sort, HasBrokenFile, HasBrokenLink, ReportClass, CanViewType, CanEditType, Priority, ProvideComments, MetaTitle, CommentNotificationEmail, Version, ParentID, TrackingTagName, CustomQuestion, EnableCustomQuestion, CustomQuestionRequired, TermsAndConditions, SubmittedText, HeaderContent, InactiveContent, BackgroundColour, Active, Image1ID, Image2ID, CASE WHEN ClassName IS NOT NULL THEN ClassName ELSE 'SiteTree' END AS RecordClassName
FROM SiteTree_Live
LEFT JOIN Page_Live ON Page_Live.ID = SiteTree_Live.ID
LEFT JOIN CompetitionPage_Live ON CompetitionPage_Live.ID = SiteTree_Live.ID
WHERE (SiteTree_Live.ID = 308) AND (SiteTree_Live.ClassName IN ('CompetitionPage'))
ORDER BY Active DESC
LIMIT 1
Run Code Online (Sandbox Code Playgroud)
列功能:
public function columns() {
return array(
"Competition.Title" => "Competition",
"FirstName" => "First name",
"LastName" => "Last name",
"Email" => "Email"
);
}
Run Code Online (Sandbox Code Playgroud)
我的getExportFields:
public function getExportFields(){
return array(
"Competition.Title" => "Competition",
"Date" => "Date",
"FirstName" => "FirstName",
"LastName" => "LastName",
"Email" => "Email",
);
}
Run Code Online (Sandbox Code Playgroud)
通过注释掉Competition.Title对查询的引用可以快速运行并为我提供所有条目.
我无法看到如何有效地使查询工作,或者是否可以只查询竞争一次,然后将标题(以及一个或两个其他竞争字段)添加到每个竞赛条目中.
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |