Разработка сайтов, создание сайтов
главная / MySQL / Mysql_data_seek

Mysql_data_seek

Mysql_data_seekИзбежание повторных запросов

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

  • имена (name),
  • электронные адреса (email)
  • домашние странички (url)

При этом поле name является обязательным, а поля email и url — опциональными и, в случае отсутствия у посетителя email или url, принимающими значения NULL.

CREATE TABLE members (
name VARCHAR(20) NOT NULL DEFAULT ",
email TINYTEXT,
url TINYTEXT
) TYPE=MyISAM;

Одна из задач, стоящая перед администратором клуба, состоит в выводе двух списков: членов клуба, имеющих e-mail, и членов клуба, имеющих свои виртуальные странички.

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

Но можно избежать этого и решить проблему может функция mysql_data_seek (), способная перемещать внутренний указатель и имеющая следующий синтаксис:

bool mysql_data_seek(resource result_identifier, int row_number)

Функция принимает два параметра, первый из которых result_identifier — дескриптор запроса, возвращаемый функцией mysql_query(), второй — смещение внутреннего указателя относительно первой позиции.

Функция возвращает true в случае успеха и false в случае неудачи.

Вывод списков разных членов клуба

<?php
// Формируем и выполняем SQL-запрос
$query = "SELECT name, email, url FROM members";
$mem = mysql_query($query);
// Проверяем успешность выполнения запроса
if(!$mem)
{
echo "<p><b>Error: ".mysql_error () ."</b></p>";
exit();
}
// Проверяем, содержит ли результат хоть одну строку
If(mysql_num_rows($mem)>0)
{
//I таблица
// Выводим заголовок таблицы
echo "<table>";
while(list($name, $email, $url) = mysql_fetch_row($mem))
if($email !== NULL) echo "<tr><td>$name</td><td>$email</td></tr>";
// Выводим завершение таблицы
echo "</table>";
// Устанавливаем внутренний указатель в начало
mysql_data_seek($mem, 0);
// II таблица
// Выводим заголовок таблицы
echo "<table>";
while(list($name, $email, $url) = mysql_fetch_row($mem))
if ($email !== NULL) echo "<tr><td>$name</tdxtd>$url</tdx/tr>";
//Выводим завершение таблицы
echo "</table>";

Таким образом, для вывода обеих таблиц мы обошлись одним SQL-запросом.



Источник: webworks.com.ua
текущее:

НОВОСТИ

2011 г., «VisMech.ru»