我遇到多个循环导致系统资源错误的情况。
我需要一些关于此要求的地图语法或编码样本地图的帮助。
要求是:
// get list of unique accounts from the set
list<Account> accList = new list<Account >([SELECT Id,Average_of_Pulse_Check_Recommend_Score_N__c,Average_of_Recommend_Score_Lanyon_N__c,Average_of_Touchpoint_Recommend_Score_N__c,Average_of_Touch_Point_Satisfaction_N__c FROM Account WHERE Id in:AccIds]);
list<ReportCard__c> allRCList = new list<ReportCard__c>([SELECT Id,Net_Promoter_text__c,CreatedDate, Contact__c, Account__c, RecordTypeID, Touchpoint_Satisfaction_text__c FROM ReportCard__c WHERE Account__c in:accList Order By Account__c, CreatedDate Desc]);
List<ReportCard__c> rcListbyAccounts = new List<ReportCard__c>();
for(Account acc:accList)
{
任何帮助都将不胜感激。
由于
答案 0 :(得分:0)
我不确定我是否理解你的情况。您已跳过for循环 - 我强烈怀疑您遇到的任何问题都在循环中而不是在查询中。
看起来您应该阅读有关使用关系查询(常规数据库中JOIN的salesforce版本)的信息:http://www.salesforce.com/us/developer/docs/soql_sosl/Content/sforce_api_calls_soql_relationships.htm 要特别注意子查询(其行为类似于相关列表在记录的详细信息页面上的行为)。
从我看到的情况来看,我说你根本不需要查询帐户,或者至少不是这样。这同样有效:
SELECT Id,Net_Promoter_text__c,CreatedDate, Contact__c, Account__c, ...
FROM ReportCard__c
WHERE Account__c in:accIds
ORDER BY Account__c, CreatedDate Desc
现在让我们进行攻击:
报告卡列表,每个联系人按1过滤,最近创建 仅记录。如果ReportCard有2条记录具有相同的联系人,请包含 只是最近创建的。
我反过来 - 我从联系人级别开始查询,转到相关的报告卡列表并选择最新的一个。这样就消除了重复联系人的问题。像这样:
SELECT Id, Name, Email,
(SELECT Id, Net_Promoter_text__c, CreatedDate, Account__c, Account__r.Name, Account__r.Average_of_Pulse_Check_Recommend_Score_N__c
FROM ReportCards__r
WHERE Account__c IN :accIds
ORDER BY CreatedDate DESC
LIMIT 1)
FROM Contact
WHERE AccountId IN :accIds
这来自Contact&#34; down&#34;报告卡(通过关系名称ReportCards__r
),然后&#34;向上&#34;从卡到帐户通过Account__r.Name
,Account__r.Average_of_Pulse_Check_Recommend_Score_N__c
...