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

Форум MySQL

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

 

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

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

тема: сравнение времени.
 
 автор: 10100100   (11.08.2007 в 19:54)   письмо автору
 
 

Здравствуйте.
нужна помощь в создании скриптика нбольшого..
в общем алгоритм следующий:

Если время запуска скрипта больше двух часов относительно времени указанного в таблице то ....
иначе...

вот этот кусочек сравнения времени и не могу сделать.помогите пожалуйста кто чем может :)

   
 
 автор: Trianon   (11.08.2007 в 20:44)   письмо автору
 
   для: 10100100   (11.08.2007 в 19:54)
 


if(mysql_result(mysql_query("
    SELECT  NOW() > dttm + INTERVAL 2 HOUR FROM tbl WHERE id = $id
        "), 0)
     то() ;
else
   иначе();

   
 
 автор: 10100100   (12.08.2007 в 11:47)   письмо автору
 
   для: Trianon   (11.08.2007 в 20:44)
 

спасибо - кажется понял.

   
 
 автор: 10100100   (12.08.2007 в 16:50)   письмо автору
 
   для: Trianon   (11.08.2007 в 20:44)
 

у меня вопросик возник DTTM - это поле с которым мы сравниваем или фактическое значение??? ну тоетсь переменная?
если поле - то у меня почему то не работает - заменил на своё поле и всёравно...

кстати возможно дело в том что я ошибся при написании кода - немного переделал Ваше.
во тчто получилось:

$query10 = "SELECT NOW() > time + INTERVAL 1 HOUR FROM cms_comments WHERE id_comments = '".$id_comments."'";
        $res10 = mysql_query($query10); 

   
 
 автор: Trianon   (12.08.2007 в 18:09)   письмо автору
 
   для: 10100100   (12.08.2007 в 16:50)
 

dttm - это поле с меткой времени.
Сам запрос исполняется корректно?
какого типа поле `time`?
Имена полей, совпадающие по написанию с ключевыми словами языка, следует брать в `бэктики`.

Традиционно в SQL имена объектов пользователя и ключевые слова языка набираются в разном регистре, чтобы легче было читать код.

   
 
 автор: 10100100   (13.08.2007 в 08:18)   письмо автору
 
   для: Trianon   (12.08.2007 в 18:09)
 

time - типа datetime
а к чем у Вы сказали про бэктики?
не зню корректно ли совершается запрос, к сожалению не совсем понимаю какие данные должны быть видны.... но вот NOW() допустим не меняется а так и отаётся надписью...

   
 
 автор: Trianon   (13.08.2007 в 09:49)   письмо автору
 
   для: 10100100   (13.08.2007 в 08:18)
 

>time - типа datetime
>а к чем у Вы сказали про бэктики?

К тому что есть такой mysql-тип данных TIME, и соответственно есть такое ключевое слово в языке.
И к тому что не смотря на вышесказанное, у Вас бэктики вокруг имени столбика time не стояли.

>не зню корректно ли совершается запрос, к сожалению не совсем понимаю какие данные должны быть видны.... но вот NOW() допустим не меняется а так и отаётся надписью...

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

<?
$query10 
"SELECT NOW() > `time` + INTERVAL 1 HOUR FROM cms_comments WHERE id_comments = " intval($id_comments); 
$res10 mysql_query($query10);  
echo 
"SQL: <b>$query10</b><br>";
if(!
$res10)  echo mysql_error();
else

  
$rows mysql_num_rows($res10);
  echo 
"Number of rows found: $rows<br>";
  if(
$rows
  {
    echo 
"==<br>";
    while(
$row mysql_fetch_row($res10)) 
      echo 
$row[0]."<br>";
    echo 
"==<br>";
  }
}
?>

   
 
 автор: 10100100   (13.08.2007 в 10:48)   письмо автору
 
   для: Trianon   (13.08.2007 в 09:49)
 

Извините за тупость :( спасибо за помощь.

   
 
 автор: Trianon   (13.08.2007 в 11:02)   письмо автору
 
   для: 10100100   (13.08.2007 в 10:48)
 

получилось?

   
 
 автор: 10100100   (13.08.2007 в 11:15)   письмо автору
 
   для: Trianon   (13.08.2007 в 11:02)
 

как ни странно нет - не получилось. ситуация следующая:
есть комментарии с ID и дэйттаймом, я делаю выбору которую написали Вы, с интервалом и выделяю количество найденых полей - он мне в любом случае выдаёт значение равное единице, даже если столько времени не прошло... сдаётся мне что я где т оснвоа протупил :(.
посмотрите пожалуйста этот участок кода:

<?php
$query10 
"SELECT NOW() > 'time' + INTERVAL 1 HOUR FROM cms_comments WHERE id_comments = '".intval($id_comments)."'";
        
$res10 mysql_query($query10); 
        
$result10 mysql_num_rows($res10);
        echo 
"$result10";
        if (
$result10 == 0)
        {
$hour "1";}
        else {
$hour "0";}
        echo 
"$hour";
?>

   
 
 автор: Trianon   (13.08.2007 в 11:31)   письмо автору
 
   для: 10100100   (13.08.2007 в 11:15)
 

Я убрал апострофы вокруг числа. Намеренно убрал. Они нарушают семантику.
Вы влудили их заново. Зачем?
Проблема, конечно, не в этом. Но просто интересно, как Вы рассуждаете.

UPD.
Зачем Вы поставили апострофы вместо бэктиков вокруг имени поля?
Это скорее всего Ваша основная ошибка.

   
 
 автор: 10100100   (13.08.2007 в 11:41)   письмо автору
 
   для: Trianon   (13.08.2007 в 11:31)
 

чёрт - действительно - не внимательность :(
но проблема остаётся - Вы не знаете в чём может быть дело?

   
 
 автор: Trianon   (13.08.2007 в 11:44)   письмо автору
 
   для: 10100100   (13.08.2007 в 11:41)
 

Показывайте дамп таблицы. Структуру и фрагмент данных. Гадать смысла нет.

   
 
 автор: 10100100   (13.08.2007 в 11:53)   письмо автору
 
   для: Trianon   (13.08.2007 в 11:44)
 


-- 
-- Структура таблицы `cms_comments`
-- 

CREATE TABLE `cms_comments` (
  `id_comments` int(11) NOT NULL auto_increment,
  `id_news` tinytext,
  `name` tinytext,
  `comment` text,
  `time` datetime default NULL,
  PRIMARY KEY  (`id_comments`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=6 ;

-- 
-- Дамп данных таблицы `cms_comments`
-- 

INSERT INTO `cms_comments` VALUES (3, '54', 'user1', 'А типа я вот такой не бот ни разу и типа чилавег... :)', '2007-08-12 20:32:48');
INSERT INTO `cms_comments` VALUES (2, '54', 'user2', '1\r\n1\r\n1\r\n1\r\n1\r\n1\r\n1\r\n1\r\n1\r\n2\r\n', '2007-08-11 23:38:30');
INSERT INTO `cms_comments` VALUES (5, '54', 'user1', 'проверка', '2007-08-13 15:52:32');

   
 
 автор: Trianon   (13.08.2007 в 12:08)   письмо автору
 
   для: 10100100   (13.08.2007 в 11:53)
 

У меня оба моих скрипта (11.08.2007 в 20:44) и (13.08.2007 в 09:49) ?

   
 
 автор: 10100100   (13.08.2007 в 13:54)   письмо автору
 
   для: Trianon   (13.08.2007 в 12:08)
 

извините - не понял вопроса, что значит "у меня оба моих скрипта?" ?

   
 
 автор: Trianon   (13.08.2007 в 14:32)   письмо автору
 
   для: 10100100   (13.08.2007 в 13:54)
 

Прошу прощения. Обрывок ушел.
У меня на машине с Вашей таблицей оба отмеченных скрипта четко показывают две старых и одну новую запись.

   
 
 автор: 10100100   (13.08.2007 в 15:09)   письмо автору
 
   для: Trianon   (13.08.2007 в 14:32)
 

н да -у менгя так и есть, но вот ...... а стоп - тоетсь в одном из трёх случаев значение $hour принимает 1???

   
 
 автор: Trianon   (13.08.2007 в 19:34)   письмо автору
 
   для: 10100100   (13.08.2007 в 15:09)
 

Утром так и было.
Тогда запись еще не успела устареть по условию..

   
 
 автор: 10100100   (13.08.2007 в 20:05)   письмо автору
 
   для: Trianon   (13.08.2007 в 19:34)
 

блин - не понимаю... у меня когда ещё запись неустаревшая была - всё ранво не работало :((

   
 
 автор: Trianon   (13.08.2007 в 20:36)   письмо автору
 
   для: 10100100   (13.08.2007 в 20:05)
 


$id_comments = 5;
if(mysql_result(mysql_query("
    SELECT  NOW() > `time` + INTERVAL 2 HOUR FROM cms_comments WHERE id_comments = $id_comments
        "), 0))
     echo "old";
else
     echo "new";
echo "<hr>";


PS. Безо всякого удовольствия.

   
 
 автор: 10100100   (14.08.2007 в 03:59)   письмо автору
 
   для: Trianon   (13.08.2007 в 20:36)
 

я понимаю что без удовольствия и понимаю что надоел.
н почему мои варианты скриптов не работали?

   
 
 автор: Trianon   (14.08.2007 в 10:04)   письмо автору
 
   для: 10100100   (14.08.2007 в 03:59)
 

Потому что они содержали ошибки.
Одной из последних ошибок было то, что Вы оценивали количество строк в результате, а не содержимое поля в строке.
Количество строк - единица, если такой коммент есть, независимо от того, старый он или новый. И ноль - если такого коммента нет. Ни старого нет, ни нового.

Содержимое поля (признак устаревания коммента) достигается с помощью функции mysql_result(), применение которой в моем примере Вы определенно игнорировали.

   
Rambler's Top100
вверх

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