powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / PHP rownum ЦИКЛ
23 сообщений из 23, страница 1 из 1
PHP rownum ЦИКЛ
    #39788243
1dva3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДД!
Есть таблица с 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
PHP rownum ЦИКЛ
    #39788245
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1dva3получить кускамиЗачем?
...
Рейтинг: 0 / 0
PHP rownum ЦИКЛ
    #39788246
jan2ary
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1dva3,

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

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


а тут как монетка ляжет
...
Рейтинг: 0 / 0
PHP rownum ЦИКЛ
    #39788309
rpovarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
PHP rownum ЦИКЛ
    #39788361
1dva3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-,

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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