Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Лимитированный вывод, Разбиение результата запроса на страницы 
:(
    Опции темы
BlackHawk
Дата 22.8.2003, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 15.8.2003

Репутация: нет
Всего: нет



Прежде всего, хочу выразить особую благодарность MuToGeN за поддержку топика по поиску по заданному интервалу. После перемещения его в раздел по БД, мной был получен верный ответ. Все заключалось в синтаксисе запроса! Поле age, $age1 и $age2 в этом случае не должны были заключаться в одиночные кавычки!

Теперь у меня следующий вопрос: как наиболее просто осуществить разбиение результата запроса на страницы? confused.gif
PM MAIL ICQ   Вверх
MuToGeN
Дата 22.8.2003, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: 7
Всего: 32



У меня был такой алгоритм:

Код
$query=...;
$r=mysql_query($query);
$rpp=10; // результатов на страницу
$n=mysql_num_rows($r); // полное кол-во результатов, удовлетворяющих условиям поиска
if(!isset($_REQUEST[p])) // переменная, передаваемая при запросе, отвечающая за страницу
 $p=0;
else
 $p=$_REQUEST[p];
$cp=0; // переменная для цикла
while($n>0)
{
 $pagesString.="<a href=\"script.php?p=$cp\">".($cp+1)."</a> "; // добавление нового линка на новую страницу
 $n-=$rpp; // уменьшаем $n на кол-во результатов на странице
 $cp++; // инкрементим "текущую страницу"
}
$query.=" LIMIT ".($p*$rpp).", $rpp";
$r=mysql_query($query);
В результате имеем в $r - выборку с учетом страницы, в $pagesString - ссылки на страницы. Это самый простой способ.


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
BlackHawk
Дата 22.8.2003, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 15.8.2003

Репутация: нет
Всего: нет



Не понятно одно:

сначала интерпретатор собщает о том, что р в строке
Цитата
if(!isset($_REQUEST[p])) // переменная, передаваемая при запросе
- undefined,
та же история и с переменной $pagesString.

Ставлю перед ними @ - не работает!!!

PM MAIL ICQ   Вверх
MuToGeN
Дата 22.8.2003, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: 7
Всего: 32



с $pagesString - в самом начале прописать $pagesString="";
с $_REQUEST[p] - попробуй $_REQUEST["p"]. Да и вообще, isset() по идее на undefined ругаться не должен, т.к. именно эта функция и проверяет, defined оно или undefined.
Как именно выглядит сообщение об ошибке?


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
BlackHawk
Дата 22.8.2003, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 15.8.2003

Репутация: нет
Всего: нет



Текст сообщения выглядит вот так:
Код
Notice: Use of undefined constant p - assumed 'p' in z:\home\texhobek.ru\www\search_resume.php on line 243


потробую все сделать так как говоришь.
PM MAIL ICQ   Вверх
BlackHawk
Дата 22.8.2003, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 15.8.2003

Репутация: нет
Всего: нет



Все сделал, как ты и говорил, MuToGeN, интерпретатор ругаться перестал, но результат не выводит, т.е. не делает разбивки на страницы
PM MAIL ICQ   Вверх
MuToGeN
Дата 22.8.2003, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: 7
Всего: 32



А как это дело выглядит в скрипте? И какой получается запрос в конечном виде?


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
BlackHawk
Дата 22.8.2003, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 15.8.2003

Репутация: нет
Всего: нет



В сценарии это выглядит так:
Код
$query="SELECT * FROM resume WHERE lastname LIKE '%$last_name%' and name LIKE '%$name%'  and town LIKE '%$s_town%' ... and (age BETWEEN $age1 AND $age2) ORDER BY 'ID'";

echo "<table border='0' width='100%'>";
$list=mysql_query($query);
for($i=0; $i<mysql_num_rows($list); $i++)
{
$r=mysql_fetch_array($list);
echo "<tr><td><TABLE><TR><TD width='1%'><img src='img/style/05.gif'></TD><TD width='99%' height='25'><font face='verdana' size='1' color='ffffff'><b>",$r['lastname']," ",$r['name'],",  ",$r['age']," ",", лет","</b></font></TD></TR></TABLE></td> ... </tr>";
}
echo "</table>";
$pagesString="";
$row=mysql_query($query);
$rpp=3;
$n=mysql_num_rows($row);
if(!isset($_REQUEST["p"]))
$p=0;
else
$p=$_REQUEST[p];
$cp=0;
while($n>0)
{
$pagesString.="<a href=\"script.php?p=$cp\">".($cp+1)."</a> ";
$n-=$rpp;
$cp++;
}
$query.=" LIMIT ".($p*$rpp).", $rpp";
$row=mysql_query($query);


Я заменил в твоем примере $r на $row, чтобы не возникло конфликта.
PM MAIL ICQ   Вверх
MuToGeN
Дата 22.8.2003, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: 7
Всего: 32



Оно применяется примерно так:
Код
$query="SELECT * FROM resume WHERE lastname LIKE '%$last_name%' and name LIKE '%$name%'  and town LIKE '%$s_town%' ... and (age BETWEEN $age1 AND $age2) ORDER BY 'ID'";
$pagesString="";
$row=mysql_query($query);
$rpp=3;
$n=mysql_num_rows($row);
if(!isset($_REQUEST["p"]))
 $p=0;
else
 $p=$_REQUEST["p"];
$cp=0;
while($n>0)
{
 $pagesString.="<a href=\"script.php?p=$cp\">".($cp+1)."</a> ";
 $n-=$rpp;
 $cp++;
}
$query.=" LIMIT ".($p*$rpp).", $rpp";

echo $pagesString."<br />";
echo "<table border='0' width='100%'>";
$list=mysql_query($query);
for($i=0; $i<mysql_num_rows($list); $i++)
{
$r=mysql_fetch_array($list);
echo "<tr><td><TABLE><TR><TD width='1%'><img src='img/style/05.gif'></TD><TD width='99%' height='25'><font face='verdana' size='1' color='ffffff'><b>",$r['lastname']," ",$r['name'],",  ",$r['age']," ",", лет","</b></font></TD></TR></TABLE></td> ... </tr>";
}
echo "</table>";
echo $pagesString."<br />";
Кстати, еще надо заменить script.php на твое имя скрипта и добавить все остальные переменные типа $lastname и $s_town в ссылки на страницы (...&lastname=$lastname&s_town=$s_town&...)


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
MuToGeN
Дата 22.8.2003, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: 7
Всего: 32



Цитата
echo "<table border='0' width='100%'>";
$list=mysql_query($query);
for($i=0; $i<mysql_num_rows($list); $i++)
{
$r=mysql_fetch_array($list);
echo .....
}

после этого:

$row=mysql_query($query);
$rpp=3;
$n=mysql_num_rows($row);
if(!isset($_REQUEST["p"]))
  $p=0;
else
  $p=$_REQUEST[p];
$cp=0;
.......
.......
Какой смысл разбивать на страницы после того, как вся выборка из БД уже отдана пользователю?


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
BlackHawk
  Дата 22.8.2003, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 15.8.2003

Репутация: нет
Всего: нет



Все отлично, MuToGen, работает просто прекрасно! Огромное тебе человеческое спасибо!!!
Код действительно довольно простой, но весьма эффективный, как все гениальное!!!

Но мне снова не дает покоя старый косяк! Это возвращаясь к вопросу о конструкции выборки с использованием BETWEEN, ситуация такова: если не брать переменные $age1 и $age2 в кавычки, то интерпретатор возвращает синтактическую ошибку типа:
Код

MySQL returned:
1064: You have an error in your SQL syntax near 'AND ) ORDER BY 'ID' LIMIT 0, 3' at line 1
,
а если заключить в кавычки, то возвращает нулевой результат.
Я по такому случаю переустановил MySQL v.4.0.3 for Win9X-XP, результат тот-же. Я в замешательстве!!!

PM MAIL ICQ   Вверх
BlackHawk
Дата 22.8.2003, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 15.8.2003

Репутация: нет
Всего: нет



Только я не совсем понял, куда именно необходимо вписать:
...&lastname=$lastname&s_town=$s_town&...

В эту часть кода?
Цитата
$pagesString.="<a href=\"script.php?p=$cp\">".($cp+1)."</a> ";

т.е. я так понял, что между "$cp" и "\" ?

В принципе, результат все равно выводится, правда с предупреждениями о том, что переменные не идентифицированы, так может их просто пометить@ ?
PM MAIL ICQ   Вверх
MuToGeN
Дата 22.8.2003, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: 7
Всего: 32



Да,
$pagesString.="<a href=\"script.php?p=$cp&lastname=$lastname&...\">".($cp+1)."</a> ";

Выложил это дело в FAQ, кстати, немного дополнил, возможно, тебя заинтересует:
http://forum.vingrad.ru/index.php?act=ST&f...st=0#entry75605

Насчет БД...
Модератор: Пожалуйста, один топик - один вопрос.
Я на эту тему черкану пару строк в разделе БД...


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0598 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.