Ayola.net
Новости: В связи с обилием спама, постинг на форуме временно закрыт.

Для связи с поддержкой используйте тикеты в панели управления.
 
*
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь. Ноябрь 23, 2017, 04:20:43


Войти


Страниц: [1]
  Печать  
Автор Тема: Глюк?  (Прочитано 4299 раз)
0 Пользователей и 1 Гость смотрят эту тему.
popov654
Старший Новичёк
**

Карма: -1
Сообщений: 83


Просмотр профиля
« : Декабрь 05, 2007, 23:14:10 »

У меня происходит странная вещь. Я делаю выборку из базы данных, записываю полученные данные в массив функцией mysql_fetch_row(), а потом у меня должен осуществляться вывод. Проблема в том, что вместо 29 элементов масива выводится только первый(!), а остальные не выводятся. А когда я поставил в конец скрипта банальную проверку, то оказалось, что в выборке 29(!) строк, а в массиве всего один элемент - с индексом 0. В общем, там очень сложная программа, но я могу привести здесь конкретный кусок кода:

$db=mysql_query("SELECT DISTINCT name FROM `$base` ORDER BY name",$connect);
$name=mysql_fetch_row($db);
$n=mysql_num_rows($db);

здесь осуществляются разные операции

print_r($name);
echo "<br>";
echo $n;

В браузере в самом низу появляется следующее:
Array (
  • => первый элемент )
29

Почему это происходит?
Записан
tzps@ayola.ru
Модератор
Маэстро
*****

Карма: 79
Сообщений: 1695



Просмотр профиля WWW
« Ответ #1 : Декабрь 06, 2007, 03:22:22 »

А что вообще делает DISTINCT?
Записан

popov654
Старший Новичёк
**

Карма: -1
Сообщений: 83


Просмотр профиля
« Ответ #2 : Декабрь 06, 2007, 04:38:24 »

Нет, Вы не поняли - они все разные! Разве я стал бы спрашивать, если б там было одно и то же? Честно говоря, это классный журнал. Записи в поле name - это Фамилия Имя. Там нет одинаковых записей. А DISTINCT, кажется, исключает из выборки все повторяющиеся значения. Более того, я пробовал вместо DISTINCT писать WHERE id<=29, а он у них у всех удовлетворяет этому требованию, и... - то же самое.
Записан
popov654
Старший Новичёк
**

Карма: -1
Сообщений: 83


Просмотр профиля
« Ответ #3 : Декабрь 06, 2007, 04:40:01 »

И потом, ведь mysql_num_rows() выдал 29. Значит, их и с DISTINCT было получено 29. А в массиве всего один элемент.
Записан
popov654
Старший Новичёк
**

Карма: -1
Сообщений: 83


Просмотр профиля
« Ответ #4 : Декабрь 06, 2007, 04:52:08 »

Ну вот, я вообще убрал DISTINCT. Теперь должен железно выводить всю колонку. И всё равно всё как было... Грустный
Записан
tzps@ayola.ru
Модератор
Маэстро
*****

Карма: 79
Сообщений: 1695



Просмотр профиля WWW
« Ответ #5 : Декабрь 06, 2007, 05:02:41 »

Ну а чего вы ждёте? Вы ведь вытаскиваете всего одну строку из полученного ответа - $name=mysql_fetch_row($db);
Записан

popov654
Старший Новичёк
**

Карма: -1
Сообщений: 83


Просмотр профиля
« Ответ #6 : Декабрь 06, 2007, 05:38:05 »

То есть как? mysql_fetch_row() должна возвращать неассоциативный массив! Я в руководстве по PHP видел в листинге следующий код:
while (list($mark,$date,$type)=mysql_fetch_row($db)) {...}

Так ведь функция list() работает с массивами?  Непонимающий
Записан
popov654
Старший Новичёк
**

Карма: -1
Сообщений: 83


Просмотр профиля
« Ответ #7 : Декабрь 06, 2007, 05:41:06 »

Я думал, что один ответ возвращает только mysql_result()...
Более того, когда я пытался писать конструкцию типа
while ($name=mysql_fetch_row($db)) {
...
echo $name;
...}
она вместо имён писала Array. Ну так получается, это массив. А почему он состоит только из первого элемента выборки?
« Последнее редактирование: Декабрь 06, 2007, 05:47:22 от popov654 » Записан
Astraller™
Маэстро
*****

Карма: 151
Сообщений: 1389

Вселенское зло


Просмотр профиля WWW
« Ответ #8 : Декабрь 06, 2007, 14:57:09 »

Я думал, что один ответ возвращает только mysql_result()...
Более того, когда я пытался писать конструкцию типа
while ($name=mysql_fetch_row($db)) {
...
echo $name;
...}
она вместо имён писала Array. Ну так получается, это массив. А почему он состоит только из первого элемента выборки?
1) Она обрабатывает всего 1 ряд результата.
2) Она возвращает НЕ ассоциативный массив.
Информация с php.ru
Записан

Гамлета здесь больше нет. Осталась только тень.
tzps@ayola.ru
Модератор
Маэстро
*****

Карма: 79
Сообщений: 1695



Просмотр профиля WWW
« Ответ #9 : Декабрь 06, 2007, 16:46:40 »

Ну так получается, это массив. А почему он состоит только из первого элемента выборки?
Разумеется это массив, ведь ваша таблица состоит из стоблцов и строк.
mysql_fetch_row() вытаскивает 1 строку состоящую из вашей кучки столбцов.

Записан

popov654
Старший Новичёк
**

Карма: -1
Сообщений: 83


Просмотр профиля
« Ответ #10 : Декабрь 06, 2007, 18:28:33 »

А...ясно. Спасибо, буду думать. А про ассоциативный массив я ничего не говорил.  Подмигивающий
Записан
Страниц: [1]
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.13 | SMF © 2006, Simple Machines LLC

2003-2008 © ООО "Инфотур" - Бесплатный хостинг Ayola.net
Valid XHTML 1.0! Valid CSS! Dilber MC Theme by HarzeM
Страница сгенерирована за 0.063 секунд. Запросов: 17.