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

Форум PHP

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

 

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

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

тема: Проблема со сравнением севодняшней даты и с заданной датой
 
 автор: AxelX   (14.08.2008 в 23:57)   письмо автору
 
 

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

  $now_d = date("d.m.Y");
  $now_t = date("H.i"); 
  if($myrow['date'] >= $now_d && $myrow['time'] >= $now_t)
   {
    $result_2 = mysql_query("DELETE FROM list WHERE date='$now_d'");
   }


Помогите. Заранее спасибо!

  Ответить  
 
 автор: DDK   (15.08.2008 в 00:22)   письмо автору
 
   для: AxelX   (14.08.2008 в 23:57)
 

Вы пытаетесь сделать тоже самое, что и:

if("капуста" >= "морковка" && "огурец" >= "помидора") 

    ...
}

Даты у вас представлены в строковом виде, а строки сравнивать - сами понимаете, бред. Переведите $myrow['date'] и $myrow['time'] в единую Unix-дату при помощи mktime() и потом уже сравнивайте с time().

  Ответить  
 
 автор: BinLaden   (15.08.2008 в 00:36)   письмо автору
 
   для: DDK   (15.08.2008 в 00:22)
 

> а строки сравнивать - сами понимаете, бред

Почему же? Вполне можно. Разве что формат "d.m.Y" для сравнения не может подходить.

  Ответить  
 
 автор: AxelX   (15.08.2008 в 01:36)   письмо автору
 
   для: BinLaden   (15.08.2008 в 00:36)
 

Всем спасибо за ответы.
Но всётаки ничего непонял. В документации тоже ничего непонял.
Сделал так, но ничего неработает
  $now_d = mktime(0, 0, 0, date("d"), date("m"), date("Y"));
  $now_t = mktime(date("H"), date("i"), 0, 0, 0, 0);

  Ответить  
 
 автор: mihdan   (15.08.2008 в 01:31)   письмо автору
 
   для: AxelX   (14.08.2008 в 23:57)
 

С этим вопросом в MySQL-форум

  Ответить  
 
 автор: Yuriev   (15.08.2008 в 02:13)   письмо автору
 
   для: mihdan   (15.08.2008 в 01:31)
 

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

<?php
$result_2 
mysql_query("DELETE FROM list WHERE date < NOW()");
?>

  Ответить  
 
 автор: mihdan   (15.08.2008 в 02:18)   письмо автору
 
   для: Yuriev   (15.08.2008 в 02:13)
 

А почему вы мне это адресовали. Вопрос задал автор ???

  Ответить  
 
 автор: AxelX   (15.08.2008 в 02:22)   письмо автору
 
   для: mihdan   (15.08.2008 в 02:18)
 

Засем придераться к таким мелочам?

Спасибо щас попробую.

  Ответить  
 
 автор: AxelX   (15.08.2008 в 02:31)   письмо автору
 
   для: Yuriev   (15.08.2008 в 02:13)
 

Всёравно остаётся таже проблема с временем.
Можно ли задавать параметры комманде NOW()?

  Ответить  
 
 автор: mihdan   (15.08.2008 в 02:35)   письмо автору
 
   для: AxelX   (15.08.2008 в 02:31)
 

Что из себя представляет поле date

  Ответить  
 
 автор: AxelX   (15.08.2008 в 02:40)   письмо автору
 
   для: mihdan   (15.08.2008 в 02:35)
 

В данный момент есть 2 поля.
Это
date - вид 15.08.2008
time - вид 12.00

  Ответить  
 
 автор: mihdan   (15.08.2008 в 02:42)   письмо автору
 
   для: AxelX   (15.08.2008 в 02:40)
 

А почему не сделать поле date типа timestamp - ведь так проще буит

  Ответить  
 
 автор: AxelX   (15.08.2008 в 02:45)   письмо автору
 
   для: mihdan   (15.08.2008 в 02:42)
 

Единственное что я знаю об этом типе, что дата вродибы будет имет такой вид 2008-08-15 12:00
а мне надо 15.08.2008 ...

  Ответить  
 
 автор: BinLaden   (15.08.2008 в 02:47)   письмо автору
 
   для: AxelX   (15.08.2008 в 02:45)
 

Всегда можно будет вывести её в нужном формате. Например,

SELECT DATE_FORMAT(`dt`, '%d.%m.%Y') FROM `list`;

  Ответить  
 
 автор: AxelX   (15.08.2008 в 02:48)   письмо автору
 
   для: BinLaden   (15.08.2008 в 02:47)
 

Спасибо!
Завтра попробую

  Ответить  
 
 автор: BinLaden   (15.08.2008 в 02:45)   письмо автору
 
   для: AxelX   (15.08.2008 в 02:31)
 

Почему же Вы удивляетесь, что строки удаляются вне зависимости от того, какое время, когда в SQL-запросе в WHERE нет никаких условий с временем?

Советую перевести все данные из полей date и time в одно какое-то поле с типом DATETIME.

Потом SQL-запрос будет выглядеть так, если я Вас правильно понял:
DELETE FROM `list` WHERE `dt` >= NOW();

, где dt - Ваше новое поле.

P.S. На секунды закрыл глаза.

  Ответить  
 
 автор: AxelX   (15.08.2008 в 02:48)   письмо автору
 
   для: BinLaden   (15.08.2008 в 02:45)
 

А дата может быть любого вида?
Просто мне надо 15.08.2008 12:00

  Ответить  
 
 автор: BinLaden   (15.08.2008 в 02:51)   письмо автору
 
   для: AxelX   (15.08.2008 в 02:48)
 

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

А вот выводить её можно с помощью DATE_FORMAT(). Возможные спецификаторы для второго аргумента функции тут: http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_date-format

  Ответить  
 
 автор: AxelX   (15.08.2008 в 02:53)   письмо автору
 
   для: BinLaden   (15.08.2008 в 02:51)
 

Ещё раз спасибо!
Завтра буду разбираться.

  Ответить  
 
 автор: AxelX   (15.08.2008 в 15:19)   письмо автору
 
   для: BinLaden   (15.08.2008 в 02:51)
 

Странно ничего неполучается.
Создал поле dt. Тип DATETIME.
Заполнил
2008-08-15 12:00:0
Поначалу были все нули.
Достаю из базы
 $result = mysql_query("SELECT DATE_FORMAT('dt','%d.%m.%Y %H:%i:%S') FROM list");
 $myrow = mysql_fetch_array($result);

И теперь пытаюсь вывести
echo $myrow['dt'];

И в итоге ничего невыводится.

  Ответить  
 
 автор: DDK   (15.08.2008 в 15:23)   письмо автору
 
   для: AxelX   (15.08.2008 в 15:19)
 

Вам нужно создать поле не типа DATE, а типа INT. И записывать в него дату в формате UNIX-time, возвращаемое mktime() или time().

  Ответить  
 
 автор: AxelX   (15.08.2008 в 15:24)   письмо автору
 
   для: DDK   (15.08.2008 в 15:23)
 

Я щас пыталсь сделать как мне сказал BinLaden.

Я вообще эти mktime() и time() непонимаю.

  Ответить  
 
 автор: BinLaden   (15.08.2008 в 16:35)   письмо автору
 
   для: AxelX   (15.08.2008 в 15:24)
 

Вам нужно создать алиас и вместо апострофов (') имена полей обрамлять в косые черты (`):

SELECT DATE_FORMAT(`dt`, '%d.%m.%Y %H:%i:%S') AS `dt_formatted` FROM list


А уж потом выводить так: echo $myrow['dt_formatted'];

  Ответить  
 
 автор: BinLaden   (15.08.2008 в 16:38)   письмо автору
 
   для: DDK   (15.08.2008 в 15:23)
 

> Вам нужно создать поле не типа DATE, а типа INT. И записывать в него дату в формате UNIX-time, возвращаемое mktime() или time()

Зачем?

  Ответить  
 
 автор: mihdan   (15.08.2008 в 16:38)   письмо автору
 
   для: DDK   (15.08.2008 в 15:23)
 

Не нужно чушь говорить: зачем плести сюда РНР когда это чистый SQL.
BinLaden дал 100% рабочий и правильный вариант

  Ответить  
 
 автор: AxelX   (15.08.2008 в 19:58)   письмо автору
 
   для: mihdan   (15.08.2008 в 16:38)
 

BinLaden
Спасибо. Теперь всё выводиться, но почемуто удаляются все записи.
Делал как Вы писали.

$result_2 = mysql_query("DELETE FROM `list` WHERE `dt` >= NOW();");

  Ответить  
 
 автор: mehelson   (15.08.2008 в 21:12)   письмо автору
 
   для: AxelX   (15.08.2008 в 19:58)
 

Насколько я понял вам нужны дата и время "теперь", а не >=

  Ответить  
 
 автор: AxelX   (15.08.2008 в 21:26)   письмо автору
 
   для: mehelson   (15.08.2008 в 21:12)
 

Что то не очень Вас понял.

  Ответить  
 
 автор: mehelson   (15.08.2008 в 21:48)   письмо автору
 
   для: AxelX   (15.08.2008 в 21:26)
 

Попробуйте =NОW()

  Ответить  
 
 автор: AxelX   (15.08.2008 в 22:16)   письмо автору
 
   для: mehelson   (15.08.2008 в 21:48)
 

Странно, перезагрузил компьютер и всё заработало, как надо.
Всем, кто помогал спасибо!
Особое спасибо BinLaden.
Надеюсь, что данная тема в форуме поможет ещё комунибудь с такой проблемой.

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

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