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

Форум MySQL

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

 

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

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

тема: запрос работает в phpMyAdmin, и 100% копия не работает в PHP
 
 автор: toproot   (04.11.2009 в 16:29)   письмо автору
 
 

Как это может быть, я уже замучился.

$q = mysql_query("SELECT foldername,level,MAX(id) FROM `folders` LIMIT 1;");
$f  = mysql_fetch_array($q); // - $Q не нравится.
 

работает только если писать * . тоесть извлечь все.
или одно поле
а если перечислять через запятую, то не пашет
НО В PHPMYADMIN все отлично работает!!!

  Ответить  
 
 автор: Trianon   (04.11.2009 в 16:43)   письмо автору
 
   для: toproot   (04.11.2009 в 16:29)
 

Запрос неоднозначен сам по себе.
echo mysql_error(); это, вероятно, подтверждает.

  Ответить  
 
 автор: toproot   (04.11.2009 в 16:50)   письмо автору
 
   для: Trianon   (04.11.2009 в 16:43)
 

Уже перекрутил его так что работет, но не извлекает ничего.
mysql_error ничего не выводит уже, одинаковый запрос, в phpmyadmin извлекает максимальное значение, а здесь - пусто.

  Ответить  
 
 автор: Trianon   (04.11.2009 в 16:52)   письмо автору
 
   для: toproot   (04.11.2009 в 16:50)
 

То есть Вы удовлетворены результатом.

А если неудовлетворены, то почему не показали запрос?

  Ответить  
 
 автор: toproot   (04.11.2009 в 17:31)   письмо автору
 
   для: Trianon   (04.11.2009 в 16:52)
 

не удолетворен,
запрос : SELECT level, MAX(id) FROM `folders` - phpmyadmin работает, и извлекает максимальное значения id из базы данных. В ПХП ничего не извлекает. ошибку уже не пишет, потому что переставил местами level и MAX(id) .

  Ответить  
 
 автор: Trianon   (04.11.2009 в 17:37)   письмо автору
 
   для: toproot   (04.11.2009 в 17:31)
 

еще раз.
SELECT level, MAX(id) FROM `folders` - запрос неоднозначный.
Это значит, что сервер не знает, что конкретно Вы хотите получить.
В данном случае - из какой строки взять поле level.
Нормальный сервер на такой запрос выдаст ошибку прямо и сразу.
MySQL может вернуть первый (или последний) попывшийся вариант.
Но запрос от этого прямее не станет.

  Ответить  
 
 автор: toproot   (04.11.2009 в 17:53)   письмо автору
 
   для: Trianon   (04.11.2009 в 17:37)
 

хорошо, есть у меня таблица folders
в ней 4 поля : id char(11) PRIMARY_KEY, foldername char(255),level char(11),like char(11)
Нужно извлечь поле с максимальным значением id . Два их быть не может, поскольку ID-PRIMARY-KEY

  Ответить  
 
 автор: Trianon   (04.11.2009 в 17:55)   письмо автору
 
   для: toproot   (04.11.2009 в 17:53)
 

Следите за пальцами.
Поле с максимальным значением id извлекается следующим запросом:
SELECT MAX(`id`) FROM `folders`;

В точности именно таким.

Хотя, прости господи, я не могу предположить, зачем бы Вам понадобилось максимальное значение суррогатного первичного ключа. Так просто абы зачем его как правило не требуют, потому что не нужно. Но это отдельная тема.

  Ответить  
 
 автор: toproot   (04.11.2009 в 18:02)   письмо автору
 
   для: Trianon   (04.11.2009 в 17:55)
 


 $query = "SELECT MAX(`id`) FROM `folders`;";
 $q = mysql_query($query);
 $f = mysql_fetch_array($q);
 $maxid = $f[id];

$maxid - пустой. хотя оно точно есть и пхпмуадмин его извлекает, оно равно 4.

  Ответить  
 
 автор: Trianon   (04.11.2009 в 18:04)   письмо автору
 
   для: toproot   (04.11.2009 в 18:02)
 

ну так он в данном случае не $f[id] и даже не $f['id'] ,а скорее $f['MAX(`id`)'] , и наверняка $f[0]

Диагностику ошибок надо включать. На этапе отладки - как минимум.

  Ответить  
 
 автор: toproot   (04.11.2009 в 18:06)   письмо автору
 
   для: Trianon   (04.11.2009 в 18:04)
 

Я обычно так делал, и вроде работало, а $f['MAX(`id`)'] я такого и не видал!

  Ответить  
 
 автор: Trianon   (04.11.2009 в 18:08)   письмо автору
 
   для: toproot   (04.11.2009 в 18:06)
 

делать надо было print_r($f);

  Ответить  
 
 автор: ols   (04.11.2009 в 17:57)   письмо автору
 
   для: toproot   (04.11.2009 в 16:29)
 


SELECT foldername,level,id FROM folders WHERE id = (SELECT MAX(id) FROM folders)

  Ответить  
 
 автор: ols   (04.11.2009 в 18:02)   письмо автору
 
   для: ols   (04.11.2009 в 17:57)
 

Либо SELECT * FROM folders ORDER BY id DESC LIMIT 1

  Ответить  
 
 автор: toproot   (04.11.2009 в 19:11)   письмо автору
 
   для: ols   (04.11.2009 в 18:02)
 

#1064 - 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 'like) values('5','КатегориÑ

не знаете ли что ето может означать ?
запрос : INSERT INTO `folders` (id,foldername,level,like) VALUES('5','Категория 1','1','4');

  Ответить  
 
 автор: Trianon   (04.11.2009 в 19:34)   письмо автору
 
   для: toproot   (04.11.2009 в 19:11)
 

может означать применение зарезервированного слова в качестве имени.
О чем как бы и сообщает.

  Ответить  
 
 автор: ols   (04.11.2009 в 22:26)   письмо автору
 
   для: toproot   (04.11.2009 в 19:11)
 

Столбец LIKE необходимо заключать в обратные кавычки, причину Вам назвал Trianon.

  Ответить  
 
 автор: toproot   (05.11.2009 в 00:34)   письмо автору
 
   для: ols   (04.11.2009 в 22:26)
 


 SELECT foldername,level,id FROM folders WHERE id = (SELECT MAX(id) FROM folders)

- извлекает падло максимальное значение - до 9. Эсли в базе данных есть 10 или больше - все равно это значение будет = 9 ! (значение max(id) )

  Ответить  
 
 автор: Trianon   (05.11.2009 в 11:32)   письмо автору
 
   для: toproot   (05.11.2009 в 00:34)
 

может просто автор структуры падло правильный тип у поля не указал?

  Ответить  
 
 автор: toproot   (05.11.2009 в 13:29)   письмо автору
 
   для: Trianon   (05.11.2009 в 11:32)
 

id char(11) PRIMARY_KEY, а что ? может нада id INT(11) PRIMARY_KEY?

  Ответить  
 
 автор: GeorgeIV   (05.11.2009 в 14:13)   письмо автору
 
   для: toproot   (05.11.2009 в 13:29)
 

char '9' будет всегда больше чем char '10'
лучше INT применять

  Ответить  
 
 автор: toproot   (05.11.2009 в 15:27)   письмо автору
 
   для: GeorgeIV   (05.11.2009 в 14:13)
 

Действительно поменял на ИНТ и все , уже нормально щитает.

  Ответить  
 
 автор: toproot   (04.11.2009 в 18:05)   письмо автору
 
   для: ols   (04.11.2009 в 17:57)
 

SELECT foldername,level,id FROM folders WHERE id = (SELECT MAX(id) FROM folders)
действительно работает, огромное спасибо вам!

  Ответить  
Rambler's Top100
вверх

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