Здравствуйте!
Столкнулся с такой задачей:
Есть объект Account, в котором два поля-лукапи Contact1 и Contact2, эти поля могут быть не заполнены. Нужно используя поля Contact1 и Contact2 вытянуть определенное количество контактов(пусть будет 10), это нужно для того чтобы сделать пагинацыю на странице. (Вариант чтобы вытянуть акаунты и потом из них значения Contact1 и Contact2 запихнуть в сет не предлагать).
Думал написать что-то типа:
SELECT *
FROM Contact
WHERE Id IN (
SELECT Contact_1 FROM Account
) OR Id IN (
SELECT Contact_2 FROM Account
)
ORDER BY Id
LIMIT 10
OFFSET 50
Но такой запрос не работает, точнее видает "Semi join sub-selects are not allowed with the 'OR' operator".
Здравствуйте! Столкнулся с такой задачей: Есть объект Account, в котором два поля-лукапи Contact1 и Contact2, эти поля могут быть не заполнены. Нужно используя поля Contact1 и Contact2 вытянуть определенное количество контактов(пусть будет 10), это нужно для того чтобы сделать пагинацыю на странице. (Вариант чтобы вытянуть акаунты и потом из них значения Contact1 и Contact2 запихнуть в сет не предлагать). Думал написать что-то типа: [code] SELECT * FROM Contact WHERE Id IN ( SELECT Contact_1 FROM Account ) OR Id IN ( SELECT Contact_2 FROM Account ) ORDER BY Id LIMIT 10 OFFSET 50 [/code] Но такой запрос не работает, точнее видает "Semi join sub-selects are not allowed with the 'OR' operator".
Ты не думал над таким моментом, что можно вытянуть по запросу в лист и написать так NOT IN: contactList1 и т.д. ?
Обязательно для чтения:
https://www.salesforce.com/us/developer/docs/apexcode/Content/langCon_apex_SOQL_variables.htm
http://www.salesforce.com/us/developer/docs/officetoolkit/Content/sforce_api_calls_soql_select.htm
Ты не думал над таким моментом, что можно вытянуть по запросу в лист и написать так NOT IN: contactList1 и т.д. ? Обязательно для чтения: https://www.salesforce.com/us/developer/docs/apexcode/Content/langCon_apex_SOQL_variables.htm http://www.salesforce.com/us/developer/docs/officetoolkit/Content/sforce_api_calls_soql_select.htm
Проблема в том, что рекордов реально много. Сейчас логика такая, что когда клиент переключает страницу, то делается новый запрос в базу(чтобы витягнуть рекорды которие должны отобразится на конкретной странице), и если сначала выбрать все рекорды и запомнить айдишки контактов в сете, то такая конструкция очень долго работает. У меня это примерно 30-40 секунд(согласитесь, это очень долго, когда клиент хочет просто просмотреть следующую страницу записей.) Если выборку контактов занести в конструктор, то соответственно страница очень долго грузится.
Как мне известно есть клиент которому нужно работать с 10000+ рекордов. Боюсь что можно и HeapExceeds схапать:(
[quote="Eugene Konstantinof"]Ты не думал над таким моментом, что можно вытянуть по запросу в лист и написать так NOT IN: contactList1 и т.д. ? [/quote] думал [quote="Alex Tsitsura"]Вариант чтобы вытянуть акаунты и потом из них значения Contact1 и Contact2 запихнуть в сет не предлагать[/quote] Проблема в том, что рекордов реально много. Сейчас логика такая, что когда клиент переключает страницу, то делается новый запрос в базу(чтобы витягнуть рекорды которие должны отобразится на конкретной странице), и если сначала выбрать все рекорды и запомнить айдишки контактов в сете, то такая конструкция очень долго работает. У меня это примерно 30-40 секунд(согласитесь, это очень долго, когда клиент хочет просто просмотреть следующую страницу записей.) Если выборку контактов занести в конструктор, то соответственно страница очень долго грузится. Как мне известно есть клиент которому нужно работать с 10000+ рекордов. Боюсь что можно и HeapExceeds схапать:(