В примере выше мы производили считывание результирующего набора данных с самого начала и до конца. Иногда бывает нужно пропустить несколько первых строк и начать с середины result-set.
int mysql_data_seek (int $result, int $row_number)
Эта функция устанавливает указатель текущей строки в результирующем наборе Sresult в позицию $row_number, так что следующий вызов mysql_fetch_assoc() вернет значения ячеек именно этой строки. Возвращает false в случае ошибки или если строки кончились.
LIMIT: ограничение выборки средствами SQL
В конце команды SELECT можно указать еще один необязательный модификатор, который позволяет поместить в результирующий набор данных не все строки из таблицы, удовлетворяющие WHERE-запросу, а только некоторые из них. Например:
SELECT * FROM people WHERE name!='' LIMIT 2, 10
Данная команда поместит в result-set не все записи с непустым именем, а только 10, начиная с третьей (нумерация начинается с 0, поэтому 2 означает "пропустить первые 2 записи").
Общий вид запроса
SELECT * FROM people WHERE name!='' LIMIT смещение, количество
Если смещение равно 0, а нужно только ограничить число записей:
SELECT * FROM people WHERE name! ='' LIMIT количество
В РНР предоставляет дополнительную функцию, извлекающую значения ячеек в обыкновенный список.
list mysql_fetch_row(int $result)
Функция mysql_fetch_row() возвращает очередную строку результата в виде списка, где каждой ячейке соответствует элемент массива с числовым индексом. Может возникнуть вопрос: зачем вообще нужны числовые индексы, когда можно использовать обращение по именам ячеек (mysql_fetch_assoc()) и SQL-конструкцию AS. Иногда в результате выборки могут присутствовать ячейки (фактически, колонки) с одинаковыми именами, но, соответственно, с различными индексами. Это происходит тогда, когда выборка в SELECT производится одновременно из нескольких таблиц . В простейших приложениях такое случается нечасто.
int mysql_num_rows (int $ result)
Функция mysql_num_rows() возвращает число строк в результате запроса. Таким образом, она позволяет определить вертикальный размер "двумерного массива результата".
mixed mysql_result(int $result, int $row, mixed $field)
Функция возвращает значение поля $field в строке результата с номером $row. Аргумент field может быть порядковым номером поля в результате, именем поля или именем поля с именем таблицы через точку tablename.fieldname. Если для имени поля в запросе применялся алиас ('SELECT foo AS bar FROM...'), используйте его вместо реального имени поля. При задании порядкового номера поля, нумерация начинается с нуля.
$conn=mysql_connect("localhost","","");$database = "book";mysql_select_db($database);$sql = "SELECT * FROM People"; // создаем SQL запрос$q = mysql_query($sql,$conn) or die(); // отправляем запрос на сервер$n = mysql_num_rows($q); // получаем число строк результата//отображаем значения полей for($i=0;$i<$n; $i++){ // перебираем все строки в результате запроса на выборку foreach ($names as $val) { // перебираем все имена полей $value = mysql_result($q,$i,$val); // получаем значение поля echo "<br>$value"; // выводим значение поля } }
Функция mysql_result() универсальна с ее помощью можно "обойти" весь результат по одной ячейке. Однако mysql_result() работает довольно медленно.
Функцию mysql_result() целесообразно применять, когда результирующий набор данных состоит из единственной ячейки. Например:
$r = mysql_query('SELECT COUNT(*) FROM people'); echo "Число строк в таблице: ".mysql_result($r, 0, 0);
Еще одна функция, обрабатывающая ряд результата запроса, возвращая массив (ассоциативный, численный или оба) с обработанным рядом результата запроса, или FALSE, если рядов больше нет. mysql_fetch_array- это расширенная версия функции mysql_fetch_row(). Помимо хранения значений в массиве с численными индексами, функция возвращает значения в массиве с индексами по названию колонок. Функция mysql_fetch_array() работает не медленнее, чем mysql_fetch_row(), и предоставляет более удобный доступ к данным.
array mysql_fetch_array ( resource result [, int result_type])
Второй опциональный аргумент result_typeв функции mysql_fetch_array() является константой и может принимать следующие значения: MYSQL_ASSOC, MYSQL_NUM и MYSQL_BOTH. Значением по умолчанию является: MYSQL_BOTH.
Используя MYSQL_BOTH, получим массив, состоящий как из ассоциативных индексов, так и из численных. MYSQL_ASSOC вернет только ассоциативные соответствия, а MYSQL_NUM - только численные. ВНИМАНИЕ: имена полей, возвращаемые этой функцией зависят от регистра.
Если несколько колонок в результате будут иметь одинаковые названия, будет возвращена последняя колонка. Чтобы получить доступ к первым, следует использовать численные индексы массива или алиасы в запросе.
// с помощью mysql_fetch_array():<?/* ... начало то же, что и в предыдущем примере */ // отображаем значения полей// получаем значение поля в виде ассоциативного массива while($row = mysql_fetch_array($q, MYSQL_ASSOC)) { echo "<tr>"; foreach ($names as $val){ echo "<br>$row[$val] "; // выводим значение поля } }?> Задание
1. Создать форму для отображения любой таблицы базы данных. Форма должна содержать список всех таблиц некоторой базы данных. При выборе какой-то таблицы из списка, эта таблица выводится в виде обычной таблицы со всем ее содержимым.
2. Разработать ряд функций для работы с базов данных форума. Обеспечить возможность добавлении, удаления, редактирования данных, а также просмотр статистики, например для каждой темы, количество сообщений по этой теме.