我有2个自定义对象预约_ c和TimeDrive _c。
约会有字段
TimeDrive__c已
这是我需要做的事情
我需要让所有记录都在特定的日期范围内
select id, Target_date__c, Contact__c, Name, CreatedDate
from TimeDrive__c where Target_date__c >=:startdate and
Target_date__c <=:enddate
我需要循环浏览此列表中的每条记录,并检查此联系人的约会是否有startdate介于targetdate和createddate之间
这是我到目前为止所做的一切
timeDriverLst = [select id, Target_date__c, Contact__c, Name, CreatedDate
from TimeDrive__c where Target_date__c >=:startdate and
Target_date__c <=:enddate ];
if(timeDriverLst.size() >0){
for(integer i =0; i < timeDriverLst.size(); i++)
{
mapTime.put(timeDriverLst[i].id, timeDriverLst[i]);
/* appLst = [Select Name, Contact__c from Appointment__c where (StartDate__c > = :timeDriverLst[i].CreatedDate
and StartDateTime__c <=:timeDriverLst[i].Target_date__c) and Contact__c = :timeDriverLst[i].Contact__c ];
*/
}
我知道我不应该在for循环中有一个SOQL查询。我怎样才能避免这种情况并达到要求。
答案 0 :(得分:4)
一个丑陋但可能有用的解决方案:您可以从时间驱动程序列表中获取所有联系人ID,并找到最早创建的日期。然后,您可以提取其联系人ID在联系人ID列表中且其日期在最早创建日期和目标日期之间的所有约会。然后你需要做一个双循环,检查每个时间驱动程序的每个约会。 (在您检索它们时通过联系方式或按日期订购设备可能会有所帮助)。