Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / PHP rownum ЦИКЛ / 23 сообщений из 23, страница 1 из 1
19.03.2019, 10:56
    #39788243
1dva3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP rownum ЦИКЛ
ДД!
Есть таблица с 300000 строками. Как их можно получить кусками, например rownum between 1 and 10000 и так далее.
Помогите пжл с циклом.
Спасибо

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
<?php
$xml_data_begin = '<?xml version="1.0"?>
					<?mso-application progid="Excel.Sheet"?>
					<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
					 xmlns:o="urn:schemas-microsoft-com:office:office"
					 xmlns:x="urn:schemas-microsoft-com:office:excel"
					 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
					 xmlns:html="http://www.w3.org/TR/REC-html40">
					  <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
					   <Author>Kazkeyev Z.N.</Author>
					   <LastAuthor>Radmin</LastAuthor>
					   <Created>1980-02-15T00:00:01Z</Created>
					   <Version>12.00</Version>
					  </DocumentProperties>
					  <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
					   <ProtectStructure>False</ProtectStructure>
					   <ProtectWindows>False</ProtectWindows>
					  </ExcelWorkbook>
					<Worksheet ss:Name="Result">';
$xml_data_end = '<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
			   <ProtectObjects>False</ProtectObjects>
			   <ProtectScenarios>False</ProtectScenarios>
			  </WorksheetOptions>
			</Worksheet>
			</Workbook>';
if (ob_get_level()) {ob_end_clean();}
//header('Content-Description: File Transfer');
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=employee.xml");
echo $xml_data_begin;
	
//Наименование столбца(Колонка-РЕГИОН)
echo '<Table x:FullColumns="1"   x:FullRows="1" ss:DefaultRowHeight="15">';
	echo '<Row ss:AutoFitHeight="0">';
		echo '<Cell><Data ss:Type="String">'.mb_convert_encoding("Регион", "utf-8","windows-1251").'</Data></Cell>';
echo '</Row>';

$limit = 10;
/*$queryCount = "SELECT COUNT(*) AS count_row FROM zrdt.report_detail WHERE report_id={$report_id} 
and report_result_id={$report_result_id}";
$database->setQuery($queryCount);*/

//$rowCount = intval($database->query());         
//$rowCount = intval($database->loadResult());
//$rowCount = intval($database->loadRow());
$rowCount = intval($database->setQuery());

$maxStep = round($rowCount / $limit);

for($step = 0; $step <= 3 /* $maxStep */; $step++){//это мой цикл, который не заходит на 2 раз
	
	// $offset = $limit * $step;
	$a = $limit * $step + 1;
	$b = $a + $limit;
	
	$query = " SELECT  f.full_name AS f_name, d.*"
			. " FROM zrdt.report_detail d,zrdt.filial f"
			. " WHERE f.id=d.filial_id AND report_id = " . $report_id . " AND report_result_id = " .$report_result_id
			. " AND rownum BETWEEN {$a} AND {$b}"
			. " ORDER BY filial_id ASC";
	//var_dump($query);

	 $database->setQuery( $query );
	 $rows = $database->loadRowList(); 
	 
	// echo count($rows) . "<br>";

	foreach($rows as $row) {
	 echo '<Row>';
		echo '<Cell><Data ss:Type="String">'.mb_convert_encoding(trim($row['F_NAME']), "utf-8","windows-1251").'</Data></Cell>';	  
	echo '</Row>';	
    };
	$rows = NULL;

};
	
echo '</Table>';
echo $xml_data_end;

exit();
?>
...
Рейтинг: 0 / 0
19.03.2019, 11:00
    #39788245
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP rownum ЦИКЛ
1dva3получить кускамиЗачем?
...
Рейтинг: 0 / 0
19.03.2019, 11:00
    #39788246
jan2ary
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP rownum ЦИКЛ
1dva3,

Легко гуглится по запросу php oracle pagination.
...
Рейтинг: 0 / 0
19.03.2019, 11:06
    #39788254
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP rownum ЦИКЛ
1dva3,

Код: plsql
1.
2.
 " AND rownum BETWEEN {$a} AND {$b}"
 " ORDER BY filial_id ASC";


а тут как монетка ляжет
...
Рейтинг: 0 / 0
19.03.2019, 12:07
    #39788309
rpovarov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP rownum ЦИКЛ
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with tab as (
  select level as id from dual connect by level <= 300000
)
  select 
    min (id) from_id, max (id) to_id 
  from 
  ( 
    select row_number () over (order by id) rw, id from tab 
  ) 
  group by ceil (rw / 10000)
  order by from_id
...
Рейтинг: 0 / 0
19.03.2019, 12:59
    #39788361
1dva3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP rownum ЦИКЛ
-2-,

размер выходного xml файла очень большой.
около 1.5Гб
...
Рейтинг: 0 / 0
19.03.2019, 13:02
    #39788364
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP rownum ЦИКЛ
Вариант формировать его на сервере рассмотрен?
...
Рейтинг: 0 / 0
19.03.2019, 13:06
    #39788368
1dva3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP rownum ЦИКЛ
dmdmdm,

не понял?
...
Рейтинг: 0 / 0
19.03.2019, 13:15
    #39788378
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP rownum ЦИКЛ
1dva3размер выходного xml файла очень большой.
около 1.5ГбИ как же многократное выполнение запроса повлияет на размер файла?
...
Рейтинг: 0 / 0
19.03.2019, 13:24
    #39788386
1dva3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP rownum ЦИКЛ
-2-,

так он не будет делать full scan по всем 300000. А выберет первые 10000, потом 10001-20000 и т.д
...
Рейтинг: 0 / 0
19.03.2019, 14:19
    #39788446
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP rownum ЦИКЛ
1dva3не понял?

Насколько я понял, некий web-клиент выкачивает данные из БД себе и формирует XML-файл.
Для больших объемов данных заметно производительнее формировать файл на стороне сервера БД.
...
Рейтинг: 0 / 0
19.03.2019, 14:32
    #39788461
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP rownum ЦИКЛ
dmdmdmзаметно производительнее формировать файл на стороне сервера БД.С чего бы.
...
Рейтинг: 0 / 0
19.03.2019, 15:44
    #39788518
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP rownum ЦИКЛ
1dva3размер выходного xml файла очень большой.
около 1.5Гб

Надо разбить файл помельче?
Так что мешает раз в N... нет, лучше раз в M строк закрывать файл и открывать новый?

Или надеетесь что-то "оптимизировать" подобным образом? Что?

-2-dmdmdmзаметно производительнее формировать файл на стороне сервера БД.С чего бы.
Тоже интересуюсь...
...
Рейтинг: 0 / 0
19.03.2019, 17:00
    #39788554
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP rownum ЦИКЛ
Чисто умозрительное соображение, не проверенное практически. По крайней мере сейчас, на примере - его надо развертывать. В одном из моих проектов был накрученный вызов PHP-PL/SQL-обратно PHP (для формирования xls/pdf). До 10 тыс. строк он работал терпимо, дальше начиналась труба.

Общее соображение: на работу web-сервера, php-движка, перекачку ему данных из БД, возможные преобразования (в каждом проекте наворочено свое), формирование XML, требуются ресурсы, бОльшие, чем если XML формируется в БД.
...
Рейтинг: 0 / 0
19.03.2019, 17:30
    #39788566
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP rownum ЦИКЛ
dmdmdmОбщее соображение: на работу web-сервера, php-движка, перекачку ему данных из БД, возможные преобразования (в каждом проекте наворочено свое), формирование XML, требуются ресурсы, бОльшие, чем если XML формируется в БД.
Прям таки бОльшие? А если посчитать? :)
...
Рейтинг: 0 / 0
19.03.2019, 19:17
    #39788623
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP rownum ЦИКЛ
dmdmdmОбщее соображение на работу web-сервера - сравнивать разные архитектуры (получение файла через вебсервер и неполучения файла никем) некорректно. иначе вебсервер участвует и в том и другом случае.

php-движка - plsql работает в том же процессе, что sql и будет писать файл на те же (условно) диски, откуда читаются данные. В отличие от клиентского процесса, который может работать асинхронно с запросом в БД.

перекачку ему данных из БД - в формате xml данные занимают больший объем, чем в курсоре.

возможные преобразования (в каждом проекте наворочено свое), формирование XML - не верю, что на клиенте недоступны сравнимые по эффективности средства формирования текста.
...
Рейтинг: 0 / 0
19.03.2019, 20:04
    #39788638
Да ну
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP rownum ЦИКЛ
1dva3-2-,

размер выходного xml файла очень большой.
около 1.5Гб
ob_gzhandler не спасет?
...
Рейтинг: 0 / 0
19.03.2019, 22:34
    #39788690
MazoHist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP rownum ЦИКЛ
as_xlsx не предлагать?
...
Рейтинг: 0 / 0
20.03.2019, 17:50
    #39789186
iehf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP rownum ЦИКЛ
Для 12с так проходит:
...
Рейтинг: 0 / 0
20.03.2019, 17:52
    #39789188
iehf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP rownum ЦИКЛ
iehfДля 12с так проходит:

Код: plsql
1.
2.
...order by p.reg_time
offset :B1 rows fetch next :B2 rows only;


B1 - начальный номер
B2 - количество
...
Рейтинг: 0 / 0
20.03.2019, 17:55
    #39789190
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP rownum ЦИКЛ
iehfiehfДля 12с так проходит:
В задаче ТС pagination не требуется
...
Рейтинг: 0 / 0
20.03.2019, 18:04
    #39789198
iehf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP rownum ЦИКЛ
andrey_anonymous,
авторКак их можно получить кусками, например rownum between 1 and 10000 и так далее - похоже же
...
Рейтинг: 0 / 0
20.03.2019, 18:19
    #39789203
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP rownum ЦИКЛ
iehf похоже же
Точно?
Это не UI. ТС файл формирует.
1dva3размер выходного xml файла очень большой.
около 1.5Гб
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / PHP rownum ЦИКЛ / 23 сообщений из 23, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]