@alexsemen94
начинающий прогаммист

Есть задачка по выгрузке данных. Какие есть идеи?

Здравствуйте, у меня такая проблема. Есть два запроса. Первый по определенным условиям выгружает даты. Второй запрос, по каждой дате делает нам анализ, т.е. выгружает нужные нам данные. Проблема в том, что приходится каждую дату из первого запроса в ручную вставлять во второй. Как можно это сделать автоматически или полуавтоматически?
Объединить эти два запроса нельзя, они по отдельности очень долго выгружаются.... Все это делается в Oracle... Никакого web
  • Вопрос задан
  • 406 просмотров
Пригласить эксперта
Ответы на вопрос 5
NeiroNx
@NeiroNx
Программист
Думаю можно реализовать через курсор - первый запрос передает данные в курсор, следующие запросы обрабатываются по итерациям курсора.
datasql.ru/sqlandpol/14.htm
Ответ написан
MaxDukov
@MaxDukov
впишусь в проект как SRE/DevOps.
результат первого сохраните во "временную" табличку, выгружайте уже из нее.
второй запрос натравите на эту табличку. "временная" в кавычках - потому что классическая TEMPORARY помрет после закрытия сессии. Ну или делайте все в 1 сессии.
Ответ написан
Комментировать
@igaraev
У вас в задании противоречие
"Объединить эти два запроса нельзя, они по отдельности очень долго выгружаются"

Если по отдельности долго то вместе должно быть быстро.
Попробуйте хинт /*+ materialize */
Ответ написан
Комментировать
@dk-web
Не уверен что верно понял условие задачи. Что подразумеваете под вручную. Но навскидку.. даты в массив... $ dates
Далее
foreach $ dates as $ date
Select * from .. where date=$date
П.с. писал по сути под mysql-php
Ответ написан
nskarl
@nskarl
Вообще дизайнер
Можно вытаскивать 2 массива отдельно по необходимым параметрам и после объединять их через php:
Вытаскиваем сначала даты:
$dates = $this->get_dates( select * );

затем переформируем даты в новый массив, т.к. вытащенные даты могут идти не по порядку
и в отдельный массив суем даты, данные по которым нам нужны:
foreach ($dates as $key => $date)
		{
			$data_to_show[$key] = $date;
			$dates_array[] = $date['date'];
		}


затем вытаскиваем только те данные, по датам которых нам нужны:
$analiz = $this->get_analizs( select * where_in($dates_array));


и затем пересобираем первый массив
foreach ($analiz as $row)
		{
			$data_to_show[$row['analiz_key']][] = $row;
		}

-----------------------------

я не знаю какие ключи у вас там выбираются, но вот мой пример, где объединяются пользователи и машины, которые есть у этих пользователей
надеюсь правильно вас понял и в правильном направлении вас подтолкнул

$users = $this->user_model->get_users();
		foreach ($users as $user)
		{
			$users_to_show[$user['username']] = $user;
			$names[] = $user['username'];
		}
		
		$cars = $this->user_model->get_cars($names);
		foreach ($cars as $car)
		{
			$users_to_show[$car['owner']]['cars'][] = $car;
		}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы