}, $phones);
}
- $users = UsersTelegram::find()
+ $salesData = Sales::find()
+ ->select([
+ 'phone',
+ 'lastSaleDate' => 'MAX(date)',
+ 'dealsCount' => 'COUNT(*)',
+ 'totalSum' => 'SUM(summ)'
+ ])
->where(['phone' => $phones])
+ ->groupBy('phone')
+ ->asArray()
+ ->indexBy('phone')
+ ->all();
+
+ $memorableDates = UsersEvents::find()
+ ->select(['phone'])
+ ->where(['phone' => $phones])
+ ->distinct()
+ ->asArray()
+ ->indexBy('phone')
+ ->all();
+
+ $telegramUsers = UsersTelegram::find()
+ ->select(['phone', 'first_name', 'username'])
+ ->where(['phone' => $phones])
+ ->asArray()
+ ->indexBy('phone')
+ ->all();
+
+ $usersData = Users::find()
+ ->select(['phone', 'name'])
+ ->where(['phone' => $phones])
+ ->asArray()
+ ->indexBy('phone')
->all();
$data = [];
- foreach ($users as $user) {
- $memorableDateExists = UsersEvents::find()
- ->where(['phone' => $user['phone']])
- ->exists() ? 1 : 0;
+ foreach ($phones as $phone) {
+ $sales = $salesData[$phone] ?? [
+ 'lastSaleDate' => null,
+ 'dealsCount' => 0,
+ 'totalSum' => 0,
+ ];
- $query = Sales::find()
- ->select([
- 'lastSaleDate' => 'MAX(date)',
- 'dealsCount' => 'COUNT(*)',
- 'totalSum' => 'SUM(summ)'
- ])
- ->where(['phone' => $user['phone']])
- ->asArray()
- ->one();
+ $lastDate = $sales['lastSaleDate'] ? date('d-m-Y', strtotime($sales['lastSaleDate'])) : 'нет данных';
+ $dealsCount = $sales['dealsCount'] ?? 0;
+ $totalSum = $sales['totalSum'] ?? 0;
+
+ $memorableDateExists = isset($memorableDates[$phone]) ? 1 : 0;
- $lastDate = $query['lastSaleDate'] ? date('d-m-Y', strtotime($query['lastSaleDate'])) : 'нет данных';
- $dealsCount = $query['dealsCount'] ?? 0;
- $totalSum = $query['totalSum'] ?? 0;
+ $name = $telegramUsers[$phone]['first_name']
+ ?? $telegramUsers[$phone]['username']
+ ?? $usersData[$phone]['name']
+ ?? 'нет данных';
$data[] = [
- 'phone' => $user['phone'],
+ 'phone' => $phone,
'last_date' => $lastDate,
'deals_count' => $dealsCount,
'total_sum' => $totalSum,
'memorable_date' => $memorableDateExists,
- 'name' => $user['first_name'] ?? ($user['username'] ?? ''),
+ 'name' => $name,
];
}