Разбиваем большие запросы на страницы
Автор: Дмитрий Бородин
Учимся разбивать большие запросы на страницы, как в поисковых машинах
Часть 1
Создадим файл default.php, который содержит базовые фукнции. Вам надо подправить параметры (host/user/pass/base)
<? PHP // Глобальная переменная. Например, нужна в функции коннекта. $ Носка = ложь; // новые функции function sql ($ a) {return mysql_query ($ a); } function sqlrows ($ a) {return @mysql_num_rows ($ a); } функция sqlval ($ a, $ b, $ c) {return @mysql_result (mysql_query ($ a), $ b, $ c); } function sqlget ($ a) {return @mysql_fetch_array ($ a); } function sqlline ($ a) {return sqlget (sql ($ a)); } function sqllast () {return mysql_insert_id (); } // коннект к серверу function connect () { глобальный носок; $ Хост = "*****"; $ Пользователю = "*****"; $ База = "*****"; $ Передать = "*****"; $ Носок = @ mysql_connect ($ хозяин, $ пользователь, $ проход); if (! $ sock ||! @mysql_select_db ($ base, $ sock)) die("Сервер временно не работает"); снят с охраной ($ хост); снят с охраной ($ пользователь); снята с охраны ($ основание); снята с охраны ($ проход); } // замена die() function xdie ($ zapros = "", $ info = "") { die ("</ table> </ table> </ table> </ table> <hr> <h3> ************ $ info *********** <br> <br> ОШИБКА SQL ..... N ".mysql_errno ().": ".Mysql_error ()." </ H3> <pre> $ zapros </ pre> <hr> "); } ?>
Часть 2
Данный файл (create.php) создаст таблицу limit_test и забьет в нее 500 строк вида из разных строк.
<? PHP включают в себя ( "./ default.php"); подключения (); // удаляем таблицу (на всякий случай) sql ("DROP TABLE limit_test"); // создаем if (! sql ("CREATE TABLE limit_test (id int, s char (100))")) xdie("","Таблица не создана"); srand (время ()); // создаем запрос вида << ... VALUES (x, "xx"), (y, "yy"), ... (z, "zz") >> $ s = "INSERT INTO limit_test VALUES"; для ($ i = 0; $ i <500; $ i ++) { . $ S = "($ я, \" "; $ Х = Rand (1,100); для ($ j = 0; $ j <$ x; $ j ++) $ s. = chr (rand (ord ('a'), ord ('z'))); . $ S = "\") "; if ($ i + 1 <500) $ s. = ","; } // выполняем запрос, чтобы наполнить таблицу данными if (!sql($s)) xdie($s,"Таблица не заполнена"); ?>
Часть 3
Собственно, сам файл (search.php), который выводит на экран форму для поиска и выводит найденные результаты по ?? штук на страницу.
<body bgcolor = black text = white link = # 9999cc vlink = # cc9999> <font face = arial> <? включают в себя ( "./ default.php"); if (! isset ($ z)) $ z = ""; if (isset ($ all)) $ all = intval ($ all); if (isset ($ start)) $ start = intval ($ start); if (isset ($ len)); $ len = intval ($ len); иначе $ 10 = 10; echo "<form action = $ PHP_SELF method = get> <тип ввода = скрытое имя = значение z = поиск> Что ищем: <input type = text name = s value = '$ s'> Строк: <input type = text name = len value = '$ len' size = 5> & NBSP; <input type = submit value = 'search'> <br> <br> Спец. символы: <font color=#ff6666><b><big>_</big></b></font> - заменяет 1 любую букву, <font color=#ff6666><b><big>%</big></b></font> - заменяет любую последовательность букв. Поиск '<b>%</b>' - найдет все строки, поиск '<b>_</b>' - только строки, состоящие из 1 символа. Если поискать 'a', то, скорее всего, ничего не будет найдено, однако строки '%a%' точно найдутся.<br> </ Форма> "; switch ($ z) { кейс "поиск": подключения (); $ query = "SELECT s FROM limit_test WHERE SIKE '$ s'"; if (! isset ($ start)) { if (! ($ res = sql ($ query))) xdie ($ query, "ошибка"); $ Начать = 0; $ все = sqlrows ($ Рез); } еще { $ query. = "LIMIT $ start, $ len"; if (! ($ res = sql ($ query))) xdie ($ query, "ошибка"); } echo "Запрос: <font color = # 00ff00> $ query </ font> <br> <br>"; for ($ j = 1; $ j <= $ len && $ tmp = sqlget ($ res); $ j ++) { echo ($ start + $ j). ". $ tmp [s] <br>"; $ Stop--; } эхо "<br>"; для ($ i = 1; $ i <= floor ($ all / $ len); $ i ++) echo "<a href = $ PHP_SELF? z = search & all = $ all & len = $ len &". "start =". (($ i-1) * $ len). "& s =". urlencode ($ s). "> $ i </a>"; перерыв; } ?>