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

Форум MySQL

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

 

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

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

тема: выбрать последнюю строку из таблицы при помощи SQL или PHP
 
 автор: anatoliy   (02.08.2007 в 00:30)   письмо автору
 
 

Добрый вечер, день!
Как при помощи SQL, или PHP выбрать из таблицы
последнюю (первую) строку?

Запрос:
Select Max(DATE_FORMAT(DateTablesUpdate.DateRefresh, '%d.%m.%Y %T')
не дает желаемых результатов.

При наличии строк:
29.07.2007 10:10:27
31.07.2007 14:25:37
выбирается последняя

При наличии строк:
29.07.2007 10:10:27
31.07.2007 14:25:37
01.08.2007 11:47:24
выбирается,- 31.07.2007 14:25:37


<?php
$conn = odbc_connect("BaseMySql", "root", "1234");
$Select = "Select Max(DATE_FORMAT(DateTablesUpdate.DateRefresh, '%d.%m.%Y %T'))
AS DateRefresh From DateTablesUpdate";
$Result = odbc_exec($conn, $Select);
?>
<?
while ($row = odbc_fetch_array($Result)) :
?>
<html>
<h4 align="center">Последнее обновление страницы:
<?=$row ['DateRefresh'];?></h4>
</html>
<BR>
<?endwhile;?>
<?
odbc_free_result($Result);
odbc_close($conn);
?>

Спасибо за ответы!!!

   
 
 автор: oradev   (02.08.2007 в 00:57)   письмо автору
 
   для: anatoliy   (02.08.2007 в 00:30)
 


ЧТО ЗНАЧИТ первая(последняя) строка.
У строк нет номеров запомните.
Порядок строк гарантирует ORDER BY и только ORDER BY

   
 
 автор: anatoliy   (04.08.2007 в 14:38)   письмо автору
 
   для: oradev   (02.08.2007 в 00:57)
 

Имеется ввиду первая(последняя) запись в
таблице. Сортировать их нет необходимости,
так как они уже находятся в таблице в порядке
возростания дат и времени. В Microsoft ADODB
есть объект Recordset в котором есть указатели
MoveFirst, MoveLast указывающие соответственно
на первую, последнюю запись массива. Примерно
тоже мне надо осуществить средствами SQL или PHP.
Если Вы знаете как выбрать из таблицы запись которую
внесли последней, пожалуйста подскажите?!

   
 
 автор: Trianon   (02.08.2007 в 09:19)   письмо автору
 
   для: anatoliy   (02.08.2007 в 00:30)
 

>Select Max(DATE_FORMAT(DateTablesUpdate.DateRefresh, '%d.%m.%Y %T')
>не дает желаемых результатов.

еще бы он давал! DATE_FORMAT следует применять при формировании полей вывода, но никак не в функциях сравнения данных, к коим в частности относится MAX

   
 
 автор: anatoliy   (04.08.2007 в 14:40)   письмо автору
 
   для: Trianon   (02.08.2007 в 09:19)
 

Имелась ввиду не функция DATE_FORMAT, а часть
Select Max которая выбирает максимальное значение
в указанном поле. Для данных типа datetime она
не подходит, так как определяется максимальное
число, а не дата. C моей таблицы DateTablesUpdate
с полем DateRefresh (формат данных - datetime) мне
надо взять последнюю строку, кроме того она же
будет иметь максимальное значение даты и (или)
времени в указанном поле среди существующего
набора данных, поэтому как временное решение
использую Select Max (при смене месяца она дает
не правильный результат. Как решить эту задачу
средствами SQL или PHP.? Пожалуйста подскажите,
очень нужно!

   
 
 автор: Trianon   (04.08.2007 в 17:07)   письмо автору
 
   для: anatoliy   (04.08.2007 в 14:40)
 

Select Max которая выбирает максимальное значение
в указанном поле. Для данных типа datetime она
не подходит, так как определяется максимальное
число, а не дата.

SELECT MAX(dt) FROM tbl
отлмчно подходит для поля ве типа DATETIME.
Сравнение выполняется сравнение значений строкового типа, Который естественным образом соответствует восточному календарному формату. yyyy-mm-dd hh:mm:ss . А никакой другой формат в этих полях не хранят.

Соответственно для европейского календарного формата следует писать
SELECT DATE_FORMAT(''%d.%m.%Y %T', MAX(DateTablesUpdate.DateRefresh)) FROM ....

   
 
 автор: anatoliy   (04.08.2007 в 19:16)   письмо автору
 
   для: Trianon   (04.08.2007 в 17:07)
 

Вы случайно перепутали местами операторы.
Select DATE_FORMAT(MAX(DateTablesUpdate.DateRefresh), '%d.%m.%Y %T')
AS DateRefresh From DateTablesUpdate";
и все прекрасно заработало. Огромнейшее спасибо за оказанную помощь!!!
Если у Вас есть время подскажите пожалуйста как все таки
средствами SQL или PHP выбрать последнюю(первую) строку из нужной таблицы?

   
 
 автор: Unkind   (04.08.2007 в 21:40)   письмо автору
 
   для: anatoliy   (04.08.2007 в 19:16)
 

Записи могут меняться местами без вашего ведома.
Нужно сделать сортировку по убыванию того поля, которое определяет порядок записей. И использовать LIMIT.

   
 
 автор: Trianon   (05.08.2007 в 20:13)   письмо автору
 
   для: anatoliy   (04.08.2007 в 19:16)
 

>Если у Вас есть время подскажите пожалуйста как все таки
>средствами SQL или PHP выбрать последнюю(первую) строку из нужной таблицы?

формальный способ:
1. Выбрать максимум поля datetime (вложенным запросом)
2 выбрать строку, в которой поле datetime равно этому максимуму.

быстрый mySql-способ для таблиц с первичными auto_increment-ключами
Выбрать по LIMIT первую строку при сортировке по убыванию ключа
SELECT * FROM tbl ORDER BY id DESC LIMIT 1

   
Rambler's Top100
вверх

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