Анимация
JavaScript
|
Главная Библионтека Получение результата После того как запрос выполнен и идентификатор результирующего набора данных возвращен, вы, возможно, захотите получить этот самый результат. Поговорим о том, что же он из себя представляет. Результат - это просто набор данных, и количество вошедших в него записей можно узнать через mysql num rows(). Например, если в предхдущем примере при выборке из таблицы оказалось, что в таблице имеются записи о 10 людях старше 30 лет, то мы в идентификаторе результата получим "ссылку" на 10 "строчек". Теперь мы можем считать в программу на PHP любую из них с помощью специальных функций, которые будут описаны ниже. В таблице Таблица для всех записей, удовлетворяющих вхражению Выражение, указанные поля устанавливаются в соответствующие значения. Эта команда часто отдается, если не требуется обновлять сразу все поля какой-то записи, а нужно затронуть только некоторые. Получение числа записей, удовлетворяющих выражению Стоит рассмотреть еще одну часто востребуемую возможность MySQL - получение числа записей, удовлетворяющих некоторому выражению. Вообще говоря, существует несколько способов сделать это. Вот один из них: select count(if(ВIражение,1,NULL)) from Таблица Уже этот пример показывает, насколько богаче язык MySQL по сравнению с тем, что было описано... Получение уникальных значений столбцов При использовании базы данных часто бывает крайне удобно узнать, какие уникальные значения существуют в данном столбце таблицы. Например, если у каждой записи в некоей статистической таблице, содержащей сведения о людях, у нас есть поле Country (страна), в котором указана страна проживания конкретного человека, и мы хотим выяснить, в каких же странах проживают все люди, дожившие до 30 лет, занесенные в таблицу, можно выполнить запрос: select distinct ИмяПоля from Таблица where Выражение В нашем случае ИмяПоля=Country, а выражение - что-то вроде age>=30. Этот запрос сгенерирует результат, состоящий из одного столбца, в котором и будут перечислены искомые страны. Примечание Мне не нравится общепринятый в технической литературе термин "результирующий набор данных" - слишком уж он длинный и бесформенный. Вместо него я и дальше буду использовать слово "результат". Параметры результата int mysql num rows(int $result) Функция mysql num rows() возвращает число записей в результате запроса. Таким образом, функция позволяет определить вертикальную размерность "двумерного массива результата". int mysql num fields(int $result) Эта функция возвращает число полей в одной строке результата, т. е., число колонок в результате $result. В силу сказанного, функция позволяет определить горизонтальную размерность "двумерного массива результата". Получение поля результата int mysql result(int $result, int $row, mixed $field) Функция возвращает значение поля $field в строке результата с номером $row. Параметр $field может задавать не только имя поля, но и его номер - позицию, на которой столбец "стоял" при создании таблицы. Тем не менее, рекомендуется везде, где это только возможно, использовать именно имена полей. Примечание Если мы опять будем рассматривать результат как двумерный массив полей, то параметр $field надо поставить в соответствие его Х-координате, а $row - Y-координате. В этом понимании Х-координата чаще всего будет ассоциативной - т. е. в ней задается не число, а имя столбца. Функция универсальна: с ее помощью можно "обойти" весь результат по одной ячейке. И хотя это не возбраняется, но делать, однако, не рекомендуется, т. к. mysql result() работает довольно медленно. Лучше воспользоваться функциями, которые описываются дальше. Каждая запись - это список значений полей, а именно, тех полей и в том же порядке, которые были указаны в запросе select ... from Таблица на месте многоточия (если там была звездочка, то все поля). Таким образом, результат - это такой своеобразный двумерный массив: первый индекс - номер записи и второй - имя поля. Можете называть его прямоугольной таблицей или матрицей данных - как угодно. Примечание Может возникнуть вопрос: зачем вообще тут нужны числовые индексы. Ответ прост: дело в том, что в результате выборки в действительности могут присутствовать поля (фактически, колонки) с одинаковыми именами, но, соответственно, с различными индексами. Это происходит тогда, когда выборка в SELECT производится одновременно из нескольких таблиц (язык SQL это позволяет). Думаю, в простейших приложениях такое случается нечасто. Получение целой строки результата Разработчики MySQL предусмотрели другой, более быстрый, способ получения результата. Он чем-то похож на работу с файлами: появляется понятие текущей записи результата, и следующая операция считывания передвигает этот указатель на одну позицию вперед. Также можно установить указатель на любую указанную запись. array mysql fetch row(int $result) Функция возвращает массив-список со значениями полей очередной строки результата $result. Если указатель текущей позиции результата был установлен за последней записью (то есть строки кончились), возвращает false. Текущая позиция сдвигается к следующей записи, так что очередной вызов mysql fetch row() вернет следующую строку результата. Эту функцию чаще всего применяют в таком контексте: $r=mysql query("select * frim OurTable where age<30"); while($Row=mysql fetch row($r)) { обрабат1ваем строку $Row Как видим, цикл оборвется, как только строки закончатся, т. е. когда mysql fetch row() вернет false. Работать с числовыми индексами полей, как до сих пор предлагалось, согласитесь, не очень-то удобно. Гораздо предпочтительнее было бы использовать для адресации поля внутри результата его имя. Функция mysql fetch array() как раз и извлекает из результата очередную запись и помещает ее в ассоциативный массив. array mysql fetch array(int $result) Функция mysql fetch array() возвращает очередную строку результата в виде ассоциативного массива, где каждому полю сопоставлен элемент с ключом, совпадающим с именем поля. Дополнительно в массив записываются элементы с числовыми ключами и значениями, соответствующими величинам полей с этими индексами. В возвращаемом массиве они размещаются сразу за элементами с "обычными" ключами. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 [ 123 ] 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 |