Size: a a a

2020 April 06

IG

Ilya Grudsky in sql_ninja
В данный момент, конечно, тут нет ничего рекурсивного. Такую логику можно легко сделать на клиенте (backend app) но в этом случае там может быть ситуация, где клиент будет запрашивать 1к раз для того, чтобы выбрать 2к результатов
источник

IG

Ilya Grudsky in sql_ninja
Что очень даже "плохо".
источник

DN

Denis Novickiy in sql_ninja
Ilya Grudsky
select X
FROM ulud_usage_data AS data
        INNER JOIN uluh_usage_header AS header ON data.ulud_headerid = header.uluh_id
        INNER JOIN (SELECT DISTINCT (ulud_u_advertiserid) AS advertiser_id
                    FROM ulud_usage_data d
                             inner join uluh_usage_header h on d.ulud_headerid = h.uluh_id
                    WHERE ulud_id > "X"
                      and h.uluh_status = 0
                    LIMIT 0,1) AS uudai on uudai.advertiser_id = data.ulud_u_advertiserid

Вот эта кверя может вернуть 4к строк (per group) но есть и множество груп которые имеют только 1-2 records, в этом случае я бы хотел рекурсивно запросить след. группы  пока общее к-во rows не будет больше N (в данный момент хочу 3к)

Грубо говоря хочу рекурсивную кверю, которая будет возвращать МИНИМАЛЬНОЕ к-во строк
где у вас в запросе "Группы"? как выбирать следующую?
источник

IG

Ilya Grudsky in sql_ninja
INNER JOIN — группа (с лимитом 1), след. группу можно выбрать манипулируя " WHERE ulud_id > "X" ", где X -> max(RECORD_ID) from prev. result set
источник

IG

Ilya Grudsky in sql_ninja
Некая пагинация (вместо offset)
источник

IG

Ilya Grudsky in sql_ninja
Denis Novickiy
где у вас в запросе "Группы"? как выбирать следующую?
^
источник

DN

Denis Novickiy in sql_ninja
вот эта часть запроса может уменьшать к-во записей в итоговом запросе?
INNER JOIN uluh_usage_header AS header ON data.ulud_headerid = header.uluh_id
источник

IG

Ilya Grudsky in sql_ninja
Denis Novickiy
вот эта часть запроса может уменьшать к-во записей в итоговом запросе?
INNER JOIN uluh_usage_header AS header ON data.ulud_headerid = header.uluh_id
"INNER JOIN (SELECT DISTINCT (ulud_u_advertiserid) AS advertiser_id ..."  — JOIN со след. группой пользователей advertiser_id (для получения релевантных результатов для выбранной группы). Контроль след. группы производиться через ulud_id  (некий идентификатор row для пагинации без offset)
источник

DN

Denis Novickiy in sql_ninja
Ilya Grudsky
"INNER JOIN (SELECT DISTINCT (ulud_u_advertiserid) AS advertiser_id ..."  — JOIN со след. группой пользователей advertiser_id (для получения релевантных результатов для выбранной группы). Контроль след. группы производиться через ulud_id  (некий идентификатор row для пагинации без offset)
вопрос был другой:)
т.е., выбрали Id группы, ищем эту группу в data - нашли 5 тыс строк - выполнили
INNER JOIN uluh_usage_header AS header ON data.ulud_headerid = header.uluh_id
- осталось 1 тыс строк и нужно взять след. группу
или на итоговое к-во строк эта часть запроса не влияет?
источник

IG

Ilya Grudsky in sql_ninja
Denis Novickiy
вопрос был другой:)
т.е., выбрали Id группы, ищем эту группу в data - нашли 5 тыс строк - выполнили
INNER JOIN uluh_usage_header AS header ON data.ulud_headerid = header.uluh_id
- осталось 1 тыс строк и нужно взять след. группу
или на итоговое к-во строк эта часть запроса не влияет?
не влияет.
источник

DN

Denis Novickiy in sql_ninja
Ilya Grudsky
не влияет.
если правильно понял задачу, то как-то так - https://pastebin.com/yc2NC6WR
источник

IG

Ilya Grudsky in sql_ninja
Вы заменили лимит 1 на 3000? ) Этот лимит выбирает группу ОДНУ, после верхнего JOIN'a с которой будет 3000к строк в итоге.
источник

IG

Ilya Grudsky in sql_ninja
Делить ГРУППЫ на разные запросы НЕЛЬЗЯ.
источник

MR

Mafusail Romanovich in sql_ninja
Вух, ещё и капсом
источник

IG

Ilya Grudsky in sql_ninja
Грубо: Лимит выбирает СЕМЬЮ (одну), у семьи есть дети (1-5) -> в кабинет можно 10+-5
источник

IG

Ilya Grudsky in sql_ninja
Нужно выбрать к-во семей)
источник

IG

Ilya Grudsky in sql_ninja
ладн, буду мучаться, сенк.
источник

DN

Denis Novickiy in sql_ninja
Ilya Grudsky
Вы заменили лимит 1 на 3000? ) Этот лимит выбирает группу ОДНУ, после верхнего JOIN'a с которой будет 3000к строк в итоге.
запрос выбирает группы, которые формируют 3 тыс строк и затем выбирает все строки по этим группам.

вроде именно это и требовалось. уже не это надо?
источник

IG

Ilya Grudsky in sql_ninja
Нет, не это требовалось. Другой пример: есть табличка (продукты), нужно процессить все продукты батчами по типу (оптимально по 2000 rows). Допустим есть группа яблок (их 1566), в данном случае оптимально было бы взять еще одну группу для процессинга, допустим груши (их 1000). В итоге 2 группы (2566) > 2000 -> return
источник

IG

Ilya Grudsky in sql_ninja
т.е группы "разрывать" нельзя.
источник