РНР 5 в подлиннике

Страница 267 из 554


Глава 28. Работа с СУБД MySQL

539

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 количество

Выборка строки в виде списка

Работать с именами ячеек в большинстве случаев очень удобно, и в основном вы будете использовать функцию mysqi_fetch_assoc(), ни о чем не задумываясь. Тем не менее РНР предоставляет дополнительную функцию, работающую чуть-чуть побыстрее за счет того, что она не заботится об именах ячеек, извлекая их значения в обыкновенный список.

list mYsql_fetch_row(int $result)

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

Может возникнуть вопрос: зачем вообще нужны числовые индексы, когда можно использовать обращение по именам ячеек (mysqi_fetch_assoc()) и SQL-конструкцию as. Ответ прост: дело в том, что в результате выборки могут присутствовать ячейки (фактически, колонки) с одинаковыми именами, но, соответственно, с различными индексами. Это происходит тогда, когда выборка в select производится одновременно из нескольких таблиц (язык SQL это позволяет). В простейших приложениях такое случается нечасто.

Рекомендуем везде, где можно, использовать mysqi_fetch_assoc(), потому что она более универсальна и порождает легко отлаживаемый код.

Параметры результата

int rnysql_num_rows (int $ result)

Функция mysqi_num_rows () возвращает число строк в результате запроса. Таким образом, она позволяет определить вертикальный размер "двумерного массива результата".

int mYsql_num_fields(int $result)

Эта функция возвращает число ячеек в одной строке результата, т. е. количество колонок в результате $resuit. В силу сказанного, функция позволяет определить горизонтальный размер "двумерного массива результата".

540

Часть IV. Стандартные функции РНР

Получение отдельной ячейки результата

mixed mysql_result (int $result, int $rov, mixed $ field)

Функция возвращает значение поля $ field в строке результата с номером $row. Параметр $ field может задавать не только имя поля, но и его номер — позицию, на которой столбец "стоял" при создании таблицы. Нумерация начинается с нуля.

Если мы опять будем рассматривать результат как двумерный массив ячеек, то параметр $ field соответствует х-координате в массиве, a $row—у-координате. В этом понимании х-координата чаще всего будет ассоциативной, т. е. в ней задается не число, а имя столбца.

Функция универсальна: с ее помощью можно "обойти" весь результат по одной ячейке. И хотя это не возбраняется, но делать, однако, не рекомендуется, т. к. mysqi_resuit о работает довольно медленно. Лучше воспользоваться функциями, которые были описаны выше.

Есть один пример, когда применение mysqi_resuit () дает более ясный код, чем вызов mysqi_fetch_assoc(). Это — случай извлечения из результирующего набора данных, состоящего из единственной ячейки. Например:

$r = mysql_query('select coont(*) from people');

echo "Число строк в таблице: ".mysql_result($r, 0, 0);

Информация о результате

Будет полезно рассмотреть еще несколько функций, предназначенных для получения различной информации о результате запроса.

string mysql_field_name(int $result, int $field_index)

Функция mysqi_fieid_name () возвращает имя столбца результирующего набора данных по смещению $fieid_index. (Конечно, это имя едино для всех ячеек, входящих в данный столбец.) В общем-то, применяется она довольно редко, что связано с

Существованием фуНКЦИИ mysql_fetch_assoc().

Итак, с помощью функции mysql_field_name () мы можем "переводить" числовые х-координаты в двумерном массиве результата в их ассоциативные эквиваленты.

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

string mysql_field_type (int $result, int $field_offset)

Эта функция похожа на mysqi_fieid_name о, только возвращает не имя, а тип соответствующей колонки в результате. Им может быть, например, int, double и т. д.

int mysql_field_len(int $result, int $r"ield_or"rset)

Функция возвращает максимальную длину ячейки в результате $resuit. Ячейка, как обычно, задается указанием ее смещения. Под длиной здесь подразумевается не




  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006