Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как вывести результат запроса типа "SELECT MAX NNUM FROM NEWS"?
 
 автор: ck   (22.10.2005 в 10:07)   письмо автору
 
 

Граждане, объясните, пожалуйста, дилетанту, в каком виде здесь вообще поступает ответ. Поскольку запрашивается максимальное значение поля (с данными типа INT), то, по-моему разумению, и ответ должен содержать число? Попытки обработать результат функциями типа mysql_fetch_array, mysql_fetch_row, mysql_fetch_object - приводят к сообщению о некорректном аргументе. Что и понятно - это ведь не массив, да? Как же его вывести, использовать и проч.?

Только что проверил через gettype - оказалось, запрос возвращает значение типа boolean, и, что самое приятное - false. Стоит, наверное, привести здесь сам код запроса:
$connect=mysql_connect("localhost", "root", "");
mysql_select_db("ck", $connect);
$str="SELECT MAX NNUM FROM news";
$result=mysql_query($str, $connect);

В таблице есть поле NNUM, в нем есть данные типа INTEGER, их значение - от 0 до 2. Почему же возвращается false?

   
 
 автор: napTu3aH   (22.10.2005 в 11:25)   письмо автору
 
   для: ck   (22.10.2005 в 10:07)
 

Мммммм..... Функцию МАХ следует использовать таким способом.

SELECT MAX(nnum) AS max_num FROM news

И она соответственно будет в результирующем массиве

$connect=mysql_connect("localhost", "root", "");
mysql_select_db("ck", $connect);
$str="SELECT MAX(nnum) AS max_num FROM news";
$result=mysql_query($str, $connect);
$f=mysql_fetch_array($result);
echo $f[max_num];

   
 
 автор: ck   (22.10.2005 в 11:34)   письмо автору
 
   для: napTu3aH   (22.10.2005 в 11:25)
 

Нет, то же самое - некорректный аргумент функции mysql_fetch_array

   
 
 автор: napTu3aH   (22.10.2005 в 11:49)   письмо автору
 
   для: ck   (22.10.2005 в 11:34)
 

Попробуйте вот такой вариант:

$hostname="localhost";
$username="root";
$password="";
$dbname="ck";
mysql_connect($hostname, $username, $password);
mysql_select_db("$dbname");
$str="SELECT MAX(nnum) FROM news"; 
$result=mysql_query($str); 
$f=mysql_fetch_array($result); 
echo $f[0];



P.S. да и первый вариант тоже работает я пропустил одинарные кавычки
echo $f['max_num'];

   
 
 автор: ck   (22.10.2005 в 12:24)   письмо автору
 
   для: napTu3aH   (22.10.2005 в 11:49)
 

К сожалению, нет, парТиЗаН. У меня ни один вариант не работает. Та же ошибка возвращается.

   
 
 автор: cheops   (22.10.2005 в 12:41)   письмо автору
 
   для: napTu3aH   (22.10.2005 в 11:25)
 

Исправьте код
<?php
  $connect
=mysql_connect("localhost""root"""); 
  
mysql_select_db("ck"$connect); 
  
$str="SELECT MAX(nnum) AS max_num FROM news"
  
$result=mysql_query($str$connect); 
  
$f=mysql_fetch_array($result); 
  echo 
$f[max_num];
?>

на
<?php
  $connect
=mysql_connect("localhost""root"""); 
  
mysql_select_db("ck"$connect); 
  
$str="SELECT MAX(nnum) AS max_num FROM news"
  
$result=mysql_query($str$connect); 
  if(!
$result) exit("Ошибка - ".mysql_error());
  
$f=mysql_fetch_array($result); 
  echo 
$f[max_num];
?>

Что-нибудь дополнительно выводится в окно браузера?

   
 
 автор: ck   (22.10.2005 в 12:57)   письмо автору
 
   для: cheops   (22.10.2005 в 12:41)
 

Здравствуйте, cheops. Очень рад Вас видеть. Пользуясь случаем, хочу выразить признательность. Ваша книга стала моей настольной.
Вот сообщение об ошибке:

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(NNUM) AS max_num FROM news' at line 1

   
 
 автор: cheops   (22.10.2005 в 13:12)   письмо автору
 
   для: ck   (22.10.2005 в 12:57)
 

Хм... да вроде абсолютно чистый запрос, русских символов нет... а почему в сообщении об ошибке NNUM большими буквами, а в примере маленькими, запрос выглядит именно так? И какая версия MySQL используется?

PS Спасибо за добрый отзыв о книге :)

   
 
 автор: ck   (22.10.2005 в 13:21)   письмо автору
 
   для: cheops   (22.10.2005 в 13:12)
 

Буквы на самом деле большие, и в своих запросах я ставил такие же. Версия, кажется, 4.0.25.

   
 
 автор: ck   (22.10.2005 в 13:24)   письмо автору
 
   для: ck   (22.10.2005 в 13:21)
 

cheops, если можно - еще вопрос. Почему в поле с заданным типом TINYTEXT записывается ограниченное число знаков (246). Как этого избежать? Мне, возможно, потребуется заносить туда тексты в десятки тысяч знаков.

   
 
 автор: napTu3aH   (22.10.2005 в 13:33)   письмо автору
 
   для: ck   (22.10.2005 в 13:24)
 

Поля с типом TINYTEXT ограничены 255-ю знаками. Если вы будете использовать записи больше этой длины назначайте тип TEXT или LONGTEXT.

   
 
 автор: ck   (22.10.2005 в 13:35)   письмо автору
 
   для: napTu3aH   (22.10.2005 в 13:33)
 

Чтобы долго не рыться в справочниках - Вы не могли бы указать, как изменить тип данных для существующего поля? Спасибо.

   
 
 автор: napTu3aH   (22.10.2005 в 13:47)   письмо автору
 
   для: ck   (22.10.2005 в 13:35)
 

Для изменений типа, названия полей используют функцию "ALTER TABLE"

ALTER TABLE 'table' CHANGE 'somename' 'somename' LONGTEXT


table - имя таблицы
somename - название поля, если указать другое - переименовывает поле.

   
 
 автор: ck   (22.10.2005 в 13:57)   письмо автору
 
   для: napTu3aH   (22.10.2005 в 13:47)
 

Спасибо. Все получилось.

   
 
 автор: cheops   (22.10.2005 в 13:37)   письмо автору
 
   для: ck   (22.10.2005 в 13:24)
 

256 если быть точным, это ограничение типа, так как под адресацию используется только один байт, если вам нужно больший объём информации, испльзуйте тип TEXT (64 Кб), MEDIUMTEXT (16 Мб) или LONGTEXT (4 Gb)

http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=1436

   
 
 автор: ck   (22.10.2005 в 13:02)   письмо автору
 
   для: cheops   (22.10.2005 в 12:41)
 

Интересно узнать, в чем здесь дело, на будущее. В принципе, я, конечно, уже прописал определение максимального значения средствами PHP. Но хочется понять, что же было не так.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования