mysql:постраничный вывод... в статику

Faster

Новичок
mysql:постраничный вывод... в статику

Опишу задачу: реализация постраничного вывода из базы, используя не подход - однократного обращения к скрипту с передачей переменной $page - и затем в соответствии с ней запрос к базе с изменением параметра LIMIT, а нужно за один проход скрипта сформировать кучу страниц с последовательными пачками строк из базы. Такое по идее должен реализовать скрипт, кусок привожу
PHP:
$pages_query = "select * from $linx_table LEFT JOIN $categorys_table ON ($linx_table.site_category=$categorys_table.category_id) where site_popular='High' or site_popular='Very High' order by site_popular, site_category, site_title";   
  $rs   = mysql_query($pages_query, $conn);
  $no_of_results = mysql_num_rows($rs);
  $no_of_pages = ceil($no_of_results/$no_search_results);
  for ($i = 0; $i < $no_of_pages; $i++)
      {
	  $a = $i+1;
	  $offset = (($a-1)*$no_search_results);
	  // parse for standard tags i.e. menu, total links, build date
	  $the_html = preg_replace("/<%build-date%>/",  $build_date, $the_html);
	  // retrive cool links from database
	  $sql = "select * from $linx_table LEFT JOIN $categorys_table ON ($linx_table.site_category=$categorys_table.category_id) where site_popular='High' or site_popular='Very High' order by site_popular, site_category, site_title ASC limit $offset, $no_search_results";
	  $rs = mysql_query($sql,$conn);
	  // work out how many are new and parse
      $cool_links = mysql_num_rows($rs); 
      $the_html = preg_replace("/<%total-links%>/", $cool_links, $the_html);
	  // loop through them building new_link_html
		  $current_category = 0;
		  while( $row=mysql_fetch_array($rs) )
		   {
		   if($current_category!=$row[site_category])
		    {
			if($current_category!=0) $cool_link_html.="</blockquote>\n";
			$temp_cat = $row[site_category];
			$current_category = $row[site_category];
			}
		   $cool_link_html.= build_link_html($row[site_title],$row[site_url],$row[site_descrip],$row[site_avs],false,$row[site_popular],$row[site_banner],$row[cat_name]);
		   }
	  // parse for category links
	  $the_html = preg_replace("/<%cool-links%>/", $cool_link_html, $the_html);
	  $the_html = parse_for_directory_links($the_html,0);
	  // save page
      echo("Saving COOL Page...");
	  if($i == 0){$numberpage = "cool";}
	  else{$numberpage = "cool-".$a;}
	  $namepage = $numberpage.$page_extension;
	  echo $namepage;
	  save_html($base_build_path,$namepage,$the_html);
      echo("<a href=\"$base_build_url".$namepage."\" target=\"_blank\" class=\"link\">Saved</a>...OFFSET".$offset."<br />");
	  }
 }
в общем не работает что - куча страниц формируется с 0 по 20 записи - переменная $no_search_results = 20
либо так нельзя делать - запрос в цикле не работает похоже.. :(
подскажите хотя бы примерный алгоритм??
спасибо...
 

SelenIT

IT-лунатик :)
В чем проблема в цикле увеличивать переменную $page - и затем в соответствии с ней делать запрос к базе с изменением параметра LIMIT? В точности как при однократном обращении к скрипту...
 

Faster

Новичок
запрос внутри тела цикла?
ну так я так и делаю-смотри код
лимит меняется - вывожу его на печать, однако запросу на это похоже пофиг - выводит первые 20 записей в каждую страницу...
либо я глючу - либо так делать нельзя :(
 

Faster

Новичок
Фанат вроде как выводит 20 записей с $offset-ного номера записи (опять таки в теории) - потому как не работает гад....
 

Фанат

oncle terrible
Команда форума
ЗАЧЕМ ограничивать запрос 20-ю записями, если тебе нужны ВСЕ?!
 

Faster

Новичок
я же спросил - привел код который не работает, запостил в новичках, нужен алгоритм или похожий код - сам принцип не пойму - можно ли запрос многократно в теле цикла использовать или возможно надо извлекать все записи - помещать в массив и далее с этим массивом работать.
вот.
 

Фанат

oncle terrible
Команда форума
так я же тоже спросил.
зачем делать сто запросов вместо одного.
почему ты не отвечаешь на вопросы?
ау меня уже новый появился.
Зачем помещать записи в массив?
Ты, кажется, говорил, что тебе надо записывать их в файлы?
так в файлы, все-таки, или в массив?
или я чего-то не понял?
 

Faster

Новичок
зачем делать сто запросов вместо одного.
я не совсем шарю в вопросе, полагаю что меняя в цикле переменную $x запроса LIMIT $x,$y которая в силу моего понимания означает номер записи, я смогу перебрать все записи запроса по $y=20 записей за одну итерацию записывая каждую итерацию на отдельную страницу.
посему более всего меня интересовала правильность этого решения, поскольку оно у меня не заработало, выдавая на всех сбилденных страницах одни и те же 20 записей, при том что переменная $х меняется.
почему ты не отвечаешь на вопросы?
вроде ответил
Зачем помещать записи в массив?
чтобы работать в цикле с массивом - как альтернатива решению работать в цикле с запросом к базе, так чтобы запрос был один - а постраничная разбивка осуществлялась исключительно работой с массивом

Ты, кажется, говорил, что тебе надо записывать их в файлы? в итоге должна получиться разбивка конкретной выборки из базы постранично, образуя статичные файлы
 

Фанат

oncle terrible
Команда форума
подсказываю примерный алгоритм.
пишется очень простой скрипт, который выводит все записи из БД на экран.
Доводится до удовлетворительного состояния.

Далее, этот скрипт переписывается так, чтобы вместо экрана, он записывад все данные в файл.
Доводится до удовлетворительного состояния.

Далее, в скрипт вносится модификация из двух строчек.
считаем записанные в файл строки, и если досчитали до 2-, то закрываем файл и открываем новый.
Доводится до удовлетворительного состояния.

Далее вносим украшения, в виде строчки с навигацией, и наш скрипт готов!

-~{}~ 05.11.04 02:23:

эк мы дуплетом.
более всего меня интересовала правильность этого решения,
правильность этого решения нулевая, независимо от того, работает оно, ли нет.
а постраничная разбивка осуществлялась исключительно работой с массивом
опять не понял.
Какой смысл сначала проходить один цикл, а потом второй?
почему нельзя делать СРАЗУ?

Я чего не понимаю: отсутствия простой житейской логики.
Не опыта программирования, а именно простой логики.
Зачем делать кучу циклов?
Зачем повторять один и тот же цикл два раза?
 

Faster

Новичок
Спасибо за терпение.
Далее, в скрипт вносится модификация из двух строчек.
считаем записанные в файл строки, и если досчитали до 2-, то закрываем файл и открываем новый.
вот в этом месте поподробнее.
т е я создаю временный файл, который будет уменьшаться на ХХ записей и затем в последний раз затрется окончательно?
 

Фанат

oncle terrible
Команда форума
О, господи.
Ну что же тебя тянет все время совершать какие-то лишние телодвижения?
То массив.
то временный файл.
Ну почему нельзя ПРОСТО сразу писать то, что тебе надо, безо всяких промежуточных прокладок?

Зачем здесь временный файл?
Зачем его уменьшать?
Почему нельзя сразу писать те файлы, которые тебе нужны?
 

Фанат

oncle terrible
Команда форума
ты пишешь в файл.
в ОДИН, ВСЕ!
вот открыл файл на запись, и погнал все записи в цикле из базы в файл.
кончились записи - закрыл файл.
Это не временный файл.
Это временный СКРИПТ.
Все надо делать не наскоком, а ПОСТЕПЕННО!

Дальше ты добавляешь в свой сркипт счетчик.
Как досчитал до 20 - вставил две строчки: закрыть файл, открыть новый.
И в результате получил то, что тебе нужно.
Быстро, просто, в 20 строчек кода.
 

Faster

Новичок
Дальше ты добавляешь в свой сркипт счетчик.
Как досчитал до 20 - вставил две строчки: закрыть файл, открыть новый.
И в результате получил то, что тебе нужно.
у меня как бы не просто файлы построчно формируются , а линки по шаблону, по 20 на страницу...
но я попробую как ты сказал, еще раз спасибо за терпение...
 

Фанат

oncle terrible
Команда форума
аааа!
Ну как же!
Если в файл пишется не просто текст, а "линк по шаблону" - это ж в корне меняет все дело!
Конечно, если писать в файл не
$name, $link
а
<a href=$link>$name</a>
- то ж просто фантастическая разница!
Тут без временного файла, массива и сотни запросов не обойтись, да.
 
Сверху