在我的应用中,我会显示当前用户的列表。我这样请求:
List<User> Following = [SELECT Id, Name, SmallPhotoUrl
FROM User
WHERE Id IN (
SELECT ParentId
FROM EntitySubscription
WHERE SubscriberId = :UserInfo.getUserId())
AND Id != :UserInfo.getUserId()
LIMIT 96];
这完全符合以管理员身份登录的情况,但我发现非管理员收到错误:
实施限制:EntitySubscription仅允许安全性 在指定LIMIT时最多评估非管理员用户 1000
好的,没什么大不了的,我会像这样打一个LIMIT:
List<User> Following = [SELECT Id, Name, SmallPhotoUrl
FROM User
WHERE Id IN (
SELECT ParentId
FROM EntitySubscription
WHERE SubscriberId = :UserInfo.getUserId()
LIMIT 1000)
AND Id != :UserInfo.getUserId()
LIMIT 96];
简单,对吗?错误。这给出了以下内容:
期待正确的括号,找到'LIMIT'
行...
然后我尝试将其分解出来:List<EntitySubscription> sub = [SELECT ParentId
FROM EntitySubscription
WHERE SubscriberId = :UserInfo.getUserId()
LIMIT 1000];
List<Id> ids = new List<Id>();
for(EntitySubscription s : sub){
ids.add(s.ParentId);
}
List<User> Following = [SELECT Id, Name, SmallPhotoUrl
FROM User
WHERE Id IN (:ids)
AND Id != :UserInfo.getUserId()
LIMIT 96];
我用手指交叉......
Invalid bind expression type of LIST<Id> for column of type Id
嗯,我看过这样的例子似乎有可能,例如在developerforce boards上,所以我现在有点不知所措。
所以我们在这里。我需要选择特定用户在Chatter上关注的用户名和图片列表。如果有一种完全不同的方式可以解决它,我会接受它。
答案 0 :(得分:7)
尝试删除绑定周围的括号,即更改:
WHERE Id IN (:ids)
为:
WHERE Id IN :ids
还可以通过确保您的ID列表不包含当前用户的ID来简化查询:
List<EntitySubscription> sub = [SELECT ParentId
FROM EntitySubscription
WHERE SubscriberId = :UserInfo.getUserId() AND ParentId != :UserInfo.getUserId()
LIMIT 1000];
Set<Id> ids = new Set<Id>();
for(EntitySubscription s : sub){
ids.add(s.ParentId);
}
希望有所帮助!