Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: sql запрос дата

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Телевизор
Отправлено: 16 Февраля, 2011 - 18:55:35
Post Id



Посетитель


Покинул форум
Сообщений всего: 369
Дата рег-ции: Март 2010  
Откуда: с яндекса


Помог: 3 раз(а)




Помогите пожалуйста, не получается составить sql запрос для удаления одной старой записи.
а не все сразу как у меня сейчас получилось...

CODE (htmlphp):
скопировать код в буфер обмена
  1. <?
  2. if (isset($_GET['r']))
  3. {
  4. require $_CONFIG['file_bd']; // конект к базе
  5. $_GET['r'] = htmlspecialchars($_GET['r']); // отфильтруем каки
  6. $result = mysql_query("SELECT * FROM refer WHERE reflink = '".mysql_real_escape_string($_GET['r'])."';", $mysql_connect);
  7. $row = mysql_fetch_array($result);
  8. if(trim($row['link']) === '') // trim - удаляем пробелы
  9. {       ## если нету записи
  10.         echo "нету записи";
  11.         exit();
  12. }
  13. else
  14. {## если есть запись:  
  15.         ## вычесляем срок годности записи ( Если менеше указанной даты, значит да,  Если больше или равно, значит удаляем ( 2011-02-23-15-47-03 в формате Y-m-d-H-i-s))
  16.         $result = "DELETE FROM refer WHERE datetime_remove < now();";
  17.         $row = mysql_query($result, $mysql_connect);
  18.         if(!$row['link'])
  19.         {      
  20.                 ## если да
  21.                 echo "Да, запись НЕ просрочена";
  22.         }
  23.         else
  24.         {
  25.                 ## если нет
  26.                 echo "Нет, запись просрочена - её удалили!";
  27.         }
  28.         exit();
  29. }      
  30. }
  31. ?>


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

(Отредактировано автором: 16 Февраля, 2011 - 19:01:24)

 
 Top
Мелкий Супермодератор
Отправлено: 16 Февраля, 2011 - 19:05:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Телевизор пишет:
2011-02-23-15-47-03 в формате Y-m-d-H-i-s

Не ошиблись? Именно такой формат? Тогда используйте дополнительно str_to_date http://dev[dot]mysql[dot]com/doc/refman/[dot][dot][dot]tion_str-to-date

А что вообще хотите получить? Проверить, есть ли запись с reflink=полученному гетом? И если есть, но дата уже прошла, то удалить?
Всё, вопрос отпал. Добавьте дополнительные условия, типа:
CODE (SQL):
скопировать код в буфер обмена
  1. DELETE FROM refer WHERE datetime_remove < now() AND reflink = '".mysql_real_escape_string($_GET['r'])."' LIMIT 1;

(Отредактировано автором: 16 Февраля, 2011 - 19:09:12)



-----
PostgreSQL DBA
 
 Top
Телевизор
Отправлено: 16 Февраля, 2011 - 19:13:20
Post Id



Посетитель


Покинул форум
Сообщений всего: 369
Дата рег-ции: Март 2010  
Откуда: с яндекса


Помог: 3 раз(а)




Мелкий пишет:
2011-02-23-15-47-03 в формате Y-m-d-H-i-s
Мелкий пишет:
Не ошиблись?


эта дата будущего - ссегоднешнего дня это неделя, и получается при запросе по ?r=123
выберем поле 123 и проверяем не просрочено ли оно, если просрочено то удаляем если не просрочено то выводим другое
(Добавление)
Мелкий
Спасибо большущее, получилось...

Еще одни момент:

При запросе после удаления старой записи, не получается вывести ## если нет

как оператором if проверить этот sql запрос? чтобы было да и нет
 
 Top
Мелкий Супермодератор
Отправлено: 16 Февраля, 2011 - 19:35:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Телевизор, я именно про формат спрашиваю. Общепринятый DATETIME - Y-m-d H:i:s, т.е. 2011-02-23 15:47:03
(Добавление)
Телевизор пишет:
как оператором if проверить этот sql запрос? чтобы было да и нет

mysql_affected_rows


-----
PostgreSQL DBA
 
 Top
Телевизор
Отправлено: 16 Февраля, 2011 - 19:41:34
Post Id



Посетитель


Покинул форум
Сообщений всего: 369
Дата рег-ции: Март 2010  
Откуда: с яндекса


Помог: 3 раз(а)




Мелкий

изначально в базу записываю будущую дату так: с таким форматом:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $hours = 168; // часы будущие // одна неделя 168 часов
  2. $time = date('Y-m-d-H-i-s'); // определяем настоящее время
  3. $t = strptime($time, '%Y-%m-%d-%H-%M-%S'); // Работает strptime только на unix систем
  4. $time = mktime($t['tm_hour'], $t['tm_min'], $t['tm_sec'], $t['tm_mon']+1, $t['tm_mday'], $t['tm_year']+1900);
  5. $time = date('Y-m-d-H-i-s', $time + ($hours * 3600));
  6. $datetime_remove = $time;  // будущее время                    

(Добавление)
Мелкий

ООееес mysql_affected_rows помогла СПАСИБО ТЕБЕ !!! , Сделал я всетаки финишную В кепке

(Отредактировано автором: 16 Февраля, 2011 - 19:42:04)

 
 Top
Мелкий Супермодератор
Отправлено: 16 Февраля, 2011 - 19:55:57
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Не понял ээээ.... Не понял мммм.... Не понял убит. Не понял

А зачем такие извращения?
В распоряжении удобнейший для вычисления времени UNIXTIME (в котором вы всё равно и считаете), нативный для СУБД DATETIME, функции работы и с тем и с другим.

в общем, поздравляю, на несколько минут совершенно лишить меня способности говорить и печатать всего 6-ю строками кода - это круто.


-----
PostgreSQL DBA
 
 Top
Okula
Отправлено: 16 Февраля, 2011 - 20:22:30
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




Телевизор, да уж... так извращатся над кодом... я в шоке...
Вам же нужно осуществить обычную математическую операцию: прибавить к настоящему времени желаемое количество часов.
PHP:
скопировать код в буфер обмена
  1. $hours = 168; // часы будущие // одна неделя 168 часов
  2. $time = 3600 * $hours + time(); // желаемое будущее время в секундах
  3. $datetime_remove = date("Y-m-d-H-i-s", $time); // желаемое будущее время строкой

А можно действия в переменной $time запихнуть в функцию date() тогда и кода-то будет совсем ничего...
 
 Top
OrmaJever Модератор
Отправлено: 16 Февраля, 2011 - 21:13:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Okula это тоже порнография.
Добавить дату можно в mysql.
CODE (SQL):
скопировать код в буфер обмена
  1. INSERT INTO `table` (`date`) VALUES (NOW() + INTERVAL 168 DAY_HOUR)

и добавит дату +168 часов.

(Отредактировано автором: 16 Февраля, 2011 - 21:15:01)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Okula
Отправлено: 16 Февраля, 2011 - 22:07:03
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




OrmaJever, да неужели... с каких это пор математические операции и преоброзование данных стали порнографией?
А вот использовать функции в SQL я бы не стал бы т.к. не во всех СУБД реализация этих функций совпадает. Тот же пример с функцией NOW()

Для получения текущей даты:
В Access используется функция NOW (). В DB2 и PostgreSQL — CURRENT_DATE.
В MySQL используется функция CURDATE () . В Oracle — SYSDATE. В SQL Server и Sybase — GETDATE ()
(Добавление)
Да ещё многое зависит от того в каком виде хранится информация в БД
 
 Top
Мелкий Супермодератор
Отправлено: 16 Февраля, 2011 - 22:14:11
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Okula пишет:
А вот использовать функции в SQL я бы не стал бы т.к. не во всех СУБД реализация этих функций совпадает.

А какая разница до других СУБД, если всё равно весь код переписывать, т.к. используются mysql_* функции?
Так можно дойти и до того, что вообще SQL нельзя использовать, есть же не SQL-базы.


-----
PostgreSQL DBA
 
 Top
Okula
Отправлено: 16 Февраля, 2011 - 22:18:40
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




Мелкий, ну тут уж личное дело каждого как использовать функции в SQL я лишь высказал своё отношение к ним Улыбка
Если можно обойтись без них то я стараюсь ими не пользоваться.
 
 Top
Телевизор
Отправлено: 16 Февраля, 2011 - 22:18:55
Post Id



Посетитель


Покинул форум
Сообщений всего: 369
Дата рег-ции: Март 2010  
Откуда: с яндекса


Помог: 3 раз(а)




В затруднении эм..., никто нечего не видел... тсссс...

Okula OrmaJever Мелкий
Спасибо что подсказали...
ну хоть всплыло такое бредонеразумение...
(Добавление)
что-то страшновато стало смотреть на другие скрипты

(Отредактировано автором: 16 Февраля, 2011 - 22:19:39)

 
 Top
OrmaJever Модератор
Отправлено: 16 Февраля, 2011 - 22:29:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Okula для записи даты в бд можно написать и 100 строк а толку? Нужно распределять нагрузку. В mysql для добавления пары часов к дате существует специальный синтаксис, а в php нужно изобретать веловипед.
А зачем тогда использовать поле timestamp? Давайте делать varchar(20) и парсить сложную дату в php...


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Okula
Отправлено: 16 Февраля, 2011 - 22:52:13
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




OrmaJever, ну я например пишу дату в базу в секундах, мне намного удобнее так работать с ней.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB