我有一个具有此格式记录数的对象,其中包含文本格式的名称 -
Id Name
1 A,B,C
2 A,B
3 A
4 B
5 A,C
6 A,D
我有一个多选选项列表,其值为:
A
B
C
D
因此,如果我在我的选项列表中选择B和C,那么我必须拥有表格中包含B或C或(B和C)的记录,即在这种情况下,它应该显示4条记录:
1 A,B,C
2 A,B
4 B
5 A,C
我正在使用带有IN和INCLUDES关键字的SQL查询,但我无法实现此功能。
答案 0 :(得分:0)
这取决于您使用soql的选项有多少。我能看到的一种方式是:
Object__c myObject = new Object__c();
object.Name = 'A,B,D';
object.Multi_Select_Name__c = 'A;E';
insert object;
String query = 'select Id from Object__c';
//now we want to do a multi picklist, which is a String separated by ';'
List<String> nameSelections = object.Multi_Select_Name__c.split(';');
if(nameSelections.size() > 0) {
query += ' where ';
for(Integer i = 0; i < nameSelections.size(); i++) {
nameSelections[i] = 'Name like \'%' + nameSelections[i] + '%\'';
}
query += String.join(nameSelections, ' or ');
}
List<Object__c> objects = (List<Object__c)database.query(query);
这将创建一个类似的查询:
'select Id from Object__c where Name like '%A%' or Name like '%E%'
选择所有Object__c,其中Name包含A或E,从多选中生成。
语法错误可能适用,我只是写了这个真正的快:)我仔细检查自己。
编辑: 此代码用于构建查询
String query = 'select Id from Object__c';
String multiSelect = 'A;E';
List<String> nameSelections = multiSelect.split(';');
if(nameSelections.size() > 0 ){
query += ' where ';
for(Integer i = 0; i < nameSelections.size(); i++) {
nameSelections[i] = 'Name like \'%' + nameSelections[i] + '%\'';
}
query += String.join(nameSelections, ' or ');
}
system.debug(LoggingLevel.INFO, query);