У меня есть таблица со всеми менеджерами по продажам и их менеджером по продажам со следующей структурой:
user_id, manager_id
2,1
3,1
4,3
5, 2
6,5
Если я ищу менеджера 1, я получу список
2
3
4
5
6
Поскольку все они находятся под менеджером 1
Если я ищу менеджера 2, я получу
5,
6
Если я ищу менеджера 3, я получу
4
Мне удалось получить список с помощью запроса ниже:
SELECT user_id
FROM (SELECT user_id, manager_id FROM tbl_member
ORDER BY manager_id, user_id) products_sorted,
(SELECT @pv := '" . $user_id . "') initialisation
WHERE FIND_IN_SET(manager_id, @pv) > 0
AND @pv := CONCAT(@pv, ',', user_id)
Сейчас У меня есть другая таблица продаж, которая имеет следующую структуру:
cust_id, sales_amount, user_id
Пример данных:
a001, 100, 2
a002, 200, 3
a003, 150, 1
a004, 200, 5
a005, 100, 4
a005, 80, 6
a006, 50, 1
Могу ли я использовать JOIN с запросом sql, указанным выше, чтобы получить следующие данные:
1) Сумма sales_amount конкретного user_id * 1 051 * 2) Общая группа продаж user_id (включая все узлы, исключая личные продажи)
Пример, если я ищу user_id 1, я хочу получить следующие данные
формат (user_id, personal_sales, group_sales)
2, 100, 280
3, 200, 100
4, 100, 0
5, 200, 80
6, 80, 0
В настоящее время я использую несколько циклов while для вычисления данных ...
$userSales = $this->getUserSales($rows['user_id'], $startDate, $endDate);
$groupSales = $this->getGroupSales($rows['user_id'], $startDate, $endDate);
В функции getGroupSales я снова запускаю следующий запрос
SELECT user_id
FROM (SELECT user_id, manager_id FROM tbl_member
ORDER BY manager_id, user_id) products_sorted,
(SELECT @pv := '" . $user_id . "') initialisation
WHERE FIND_IN_SET(manager_id, @pv) > 0
AND @pv := CONCAT(@pv, ',', user_id)
для извлечения всех узлов ниже user_id и получения суммы с помощью функции getUserSales () ... которая выполняется безумно медленно. При наличии около 10 000 записей о продажах и 1000 идентификаторов пользователей загрузка страницы составляет более 30 секунд.
Может кто-нибудь посоветовать, как сделать запрос быстрее?