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

  • Автор темы Автор темы Faster
  • Дата начала Дата начала

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
либо так нельзя делать - запрос в цикле не работает похоже.. :(
подскажите хотя бы примерный алгоритм??
спасибо...
 
В чем проблема в цикле увеличивать переменную $page - и затем в соответствии с ней делать запрос к базе с изменением параметра LIMIT? В точности как при однократном обращении к скрипту...
 
запрос внутри тела цикла?
ну так я так и делаю-смотри код
лимит меняется - вывожу его на печать, однако запросу на это похоже пофиг - выводит первые 20 записей в каждую страницу...
либо я глючу - либо так делать нельзя :(
 
Фанат вроде как выводит 20 записей с $offset-ного номера записи (опять таки в теории) - потому как не работает гад....
 
ЗАЧЕМ ограничивать запрос 20-ю записями, если тебе нужны ВСЕ?!
 
я же спросил - привел код который не работает, запостил в новичках, нужен алгоритм или похожий код - сам принцип не пойму - можно ли запрос многократно в теле цикла использовать или возможно надо извлекать все записи - помещать в массив и далее с этим массивом работать.
вот.
 
так я же тоже спросил.
зачем делать сто запросов вместо одного.
почему ты не отвечаешь на вопросы?
ау меня уже новый появился.
Зачем помещать записи в массив?
Ты, кажется, говорил, что тебе надо записывать их в файлы?
так в файлы, все-таки, или в массив?
или я чего-то не понял?
 
зачем делать сто запросов вместо одного.
я не совсем шарю в вопросе, полагаю что меняя в цикле переменную $x запроса LIMIT $x,$y которая в силу моего понимания означает номер записи, я смогу перебрать все записи запроса по $y=20 записей за одну итерацию записывая каждую итерацию на отдельную страницу.
посему более всего меня интересовала правильность этого решения, поскольку оно у меня не заработало, выдавая на всех сбилденных страницах одни и те же 20 записей, при том что переменная $х меняется.
почему ты не отвечаешь на вопросы?
вроде ответил
Зачем помещать записи в массив?
чтобы работать в цикле с массивом - как альтернатива решению работать в цикле с запросом к базе, так чтобы запрос был один - а постраничная разбивка осуществлялась исключительно работой с массивом

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

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

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

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

-~{}~ 05.11.04 02:23:

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

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

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

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