База мускул вывод по страницам оптимально ли?

zeltais

Новичок
База мускул вывод по страницам оптимально ли?

есть сайт. на нём надо сделать комменты смотря какой раздел такие и комменты.
как лучше сделать вывод по страницам ?
просто записываем коммент а потом при выборке мучаемся с ЛИМИТом и формулами ( у меня это вызывает заморочку )
или при записи сморим скока коментов делим их на 10 (если надо по 10 ком.на страницу) и пишем получившеюся страницу.т.е. если у нас 68 коментов записываем 69 и в таблице в графу страница пишем 6 ????

что лучше?
 

zeltais

Новичок
У меня с первым вариантом проблема я чего то не могу разобраться с формулой :-(
 

Demiurg

Guest
php.spb.ru

а вообще сначала матиматику подучу прежде чем за программирование браться...
 

RomikChef

Guest
формулы там - умножение и деление.
с какими ты не можешь разобраться?
пиши - поможем
 

Кром

Новичок
Там у тебя видимо проблема с делением по остатку. Почитай об этом. Там ничего сложного нет.
 

Unregistered-2

Guest
PHP:
	$step=15; // <- сообщений на страницу
	if(isset($_GET[$list]) AND !empty($_GET[$list])) 
	  {$list=intval($_GET[$list]);}
	else
	  {$list=1;}
	// $list <- номер страницы

	$begin=($list-1)*$step;
	$end=$step+1;

	$qstring="SELECT ... FROM ..  WHERE .. LIMIT ".$begin.",".$end";

	$numRows=mysql_num_rows($result);

	if($list!=1)
	  {echo("<A HREF='xx.php?list=".($list-1)."'>назад</A>");}
	if($numRows==($step+1)) 
	  {echo("<A HREF='xx.php?list=".($list+1)."'>вперёд</A>");}
 

Unregistered-2

Guest
э... куча лишних слэшей - это откуда ? :)
 

RomikChef

Guest
1. в выражении if(isset($_GET[$list]) AND !empty($_GET[$list]))
первое условие не имеет смысла. Оставь только второе.
2. если скрипту передадут строку, то у тебя лист получится равен нулю.
В общем, правильно будет вот так:
if(isset($_GET[$list])) $list=intval($_GET[$list]);
if(!$list) $list=1;

Дальше. переменную end ты назвал неправильно. Это не енд, а нумбер. и она вообще не нужна, вторым параметром в лимите у тебя идет сам $step. просто степ.

в запросе у тебя в конце лишняя кавычка.

Нумровс в данном случае вычислять - бессмысленно.
Ну, не бессмысленно, а в некоторых случаях он будет работать неправильно.

куча лишних слешей от неправильной работы форума.

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

Unregistered-2

Guest
1. в выражении if(isset($_GET[$list]) AND !empty($_GET[$list]))
первое условие не имеет смысла. Оставь только второе.
э... не хотелось бы спорить с Вами но таки оно имеет смысл :)
Иначе отсутствие переменной вызовет варнинг
2. если скрипту передадут строку, то у тебя лист получится равен нулю.
Каюсь, виноват, хотел как лучше .... в оригинале написано $list=set_i_var('list',1);
она вообще не нужна, вторым параметром в лимите у тебя идет сам $step. просто степ.
НЕТ НЕ $step!
Вот тут я буду стоять до конца ;). Вторым параметром идёт именно $step+1 дабы определить нужно ли вывыодить ссылку на следующую страницу

Хотя таки да, можно написать "LIMIT ".$begin.",".($step+1);


в запросе у тебя в конце лишняя кавычка.
угу :(

Нумровс ... а в некоторых случаях он будет работать неправильно.
А можно поподробнее ? Я про это ничего не знал :(

вывод прямых ссылок на каждую страницу... для этого надо запросить еще одним запросом количество всех записей в таблице.
Э.... ЗАЧЕМ ? Честно говоря не понял

P.S> Ещё раз пардону просим за ошибки - "выдрал с мясом"...
Copy&Paste must die :)
 

RomikChef

Guest
э... не хотелось бы спорить с Вами но таки оно имеет смысл
Иначе отсутствие переменной вызовет варнинг
я думаю, тебе надо просто проверить.
Хорошо? а потом писать.
в оригинале написано $list=set_i_var('list',1);
господи, это еще что за монстр из семейства написанных руками из-за незнания стандартных функций???
Вот тут я буду стоять до конца . Вторым параметром идёт именно $step+1
А. вот тут какая хитрость.
Уважаю. Остроумно придумано, ничего не скажешь. снимаю шляпу. стой до конца.
правда, лишняя переменная, как ты правильно заметил, там не нужна.
и сладующее мое замечание снимается. все будет работать ок.
Э.... ЗАЧЕМ ? Честно говоря не понял
ну.. а ты попробуй вывести ссылки на все страницы... ну - как в гугле, например, или здесь... и сразу поймешь.
 

Unregistered-2

Guest
я думаю, тебе надо просто проверить.
Хорошо? а потом писать.
Проверил, пишу:
Notice: Undefined index: list in c:\www\www1\test\r.php on line 3

господи, это еще что за монстр из семейства написанных руками из-за незнания стандартных функций???
PHP:
function set_i_var($v, $r=-1)
{
if (isset($_REQUEST[$v]) AND (!empty($_REQUEST[$v]) OR $_REQUEST[$v]=="0")) {$r=intval($_REQUEST[$v]);}
return $r;
}
Плохо представляю какая ОДНА стандартная функция может это сделать :)

ну.. а ты попробуй вывести ссылки на все страницы...
Э... в смысле цыфирки сколько всего страниц ? Это да, это конечно ... %)
 

RomikChef

Guest
я не знаю, что ты там пишешь, телепат из меня, извини, никудышный, а ты свою писанину не потрудился привести.
но вот в мане написано
bool empty ( mixed var)
This is the opposite of (boolean) var, except that no warning is generated when the variable is not set. See converting to boolean for more information.

Для облегчения понимания важное выделено жирным шрифтом.

повторяю. isset перед !empty не имеет смысла
Плохо представляю какая ОДНА
ну, не одна, но вся эта писанина заменяется двумя строчками, которые я привел.
проверки isset и =="0" - бессмысленные.

Я, правда, неточный код привел
if(isset($_GET['list'])) $list=intval($_GET['list']); else $list=0;
if($list < 1) $list=1;
 

RomikChef

Guest
вот, как должна выглядеть твоя функция, если я правильно понимаю, как она действует и если идти против заповедей Хьюза и городить собственные функции на каждый чих:
function set_i_var($v, $r=-1)
{
if (isset($_REQUEST[$v])) return intval($_REQUEST[$v]);
return $r;
}

вот эта конструкция
(!empty($_REQUEST[$v]) OR $_REQUEST[$v]=="0")
перед intval вызывает здоровый смех.
 

Unregistered-2

Guest
PHP:
function set_i_var($v, $r=-1) 
{ 
if (isset($_REQUEST[$v])) return intval($_REQUEST[$v]);
return $r; 
}
О ! Вот за это СПАСИБО :) Каюсь, посыпаю голову пеплом и всё такое прочее :)

P.S> И всё равно конструкция
if(!empty($_GET['list'])) {echo "ЕСТЬ !";} else {echo "НЕТ !";}
При отсутствии $_GET['list'] выдаёт варнинг :(
У меня: PHP 4.2.2., Win2k
 

zeltais

Новичок
ууу какие страсти по этому вопросу :)
Спасибо ваши советы мне вроде помогли......
 
Сверху