ランダムでレコードを抽出する方法は以下の通り。
【やりたいこと/前提条件】
・5レコード抽出
・重複なし
・オブジェクト:testObject
・項目に一意の数字(Index__c)を保持
・insertTestはWrapperクラス。Stirng型のNameとInsertIndexという変数を持っていて、抽出したレコードを格納する。
List<insertTest> insertTestList = new List<insertTest>(); List<testObject__c> toList = [SELECT Id, Name, Index__c From testObject]; for (Integer i = 0, insertTestList .size() < 5; i++) { insertTest it = new insertTest(); Integer rand = Math.round(Math.random() * (toList.size() - 1)); String strIndex = toList[rand].Index__c; Boolean checkFlag = false; //ランダムで抽出したレコードが既にリストに入っていないか確認 for (Integer j = 0; j < insertTestList.size(); j++) { if (insertTestList [j].InsertIndex.equales(strIndex)) { checkFlag = true; break; } else { checkFlag = false; } } //ランダムで抽出したレコードを抽出用リストに格納 if (!checkFlag) { insertTest.Name = toList[rand].Name; insertTest.InsertIndex = toList[rand].index__c; } }
・Wrapperクラス
public class insertTest { @AuraEnabled public String Name {get; set;}; @AuraEnabled public String InsertIndex {get; set;}; public insertTest() { Name = ''; InsertIndex = ''; } }