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
Форумы портала PHP.SU :: Версия для печати :: sql запрос дата
Форумы портала PHP.SU » PHP » Программирование на PHP » sql запрос дата

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

1. Телевизор - 16 Февраля, 2011 - 18:55:35 - перейти к сообщению
Помогите пожалуйста, не получается составить 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. ?>


щас удаляет все записи в базе которые старые, а как удалить одну выбранную запись?
пытаюсь сделать если нестарая запись то одно выводит если старая то удаляем ее
2. Мелкий - 16 Февраля, 2011 - 19:05:38 - перейти к сообщению
Телевизор пишет:
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;
3. Телевизор - 16 Февраля, 2011 - 19:13:20 - перейти к сообщению
Мелкий пишет:
2011-02-23-15-47-03 в формате Y-m-d-H-i-s
Мелкий пишет:
Не ошиблись?


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

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

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

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

mysql_affected_rows
5. Телевизор - 16 Февраля, 2011 - 19:41:34 - перейти к сообщению
Мелкий

изначально в базу записываю будущую дату так: с таким форматом:
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 помогла СПАСИБО ТЕБЕ !!! , Сделал я всетаки финишную В кепке
6. Мелкий - 16 Февраля, 2011 - 19:55:57 - перейти к сообщению
Не понял ээээ.... Не понял мммм.... Не понял убит. Не понял

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

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

А можно действия в переменной $time запихнуть в функцию date() тогда и кода-то будет совсем ничего...
8. OrmaJever - 16 Февраля, 2011 - 21:13:03 - перейти к сообщению
Okula это тоже порнография.
Добавить дату можно в mysql.
CODE (SQL):
скопировать код в буфер обмена
  1. INSERT INTO `table` (`date`) VALUES (NOW() + INTERVAL 168 DAY_HOUR)

и добавит дату +168 часов.
9. Okula - 16 Февраля, 2011 - 22:07:03 - перейти к сообщению
OrmaJever, да неужели... с каких это пор математические операции и преоброзование данных стали порнографией?
А вот использовать функции в SQL я бы не стал бы т.к. не во всех СУБД реализация этих функций совпадает. Тот же пример с функцией NOW()

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

А какая разница до других СУБД, если всё равно весь код переписывать, т.к. используются mysql_* функции?
Так можно дойти и до того, что вообще SQL нельзя использовать, есть же не SQL-базы.
11. Okula - 16 Февраля, 2011 - 22:18:40 - перейти к сообщению
Мелкий, ну тут уж личное дело каждого как использовать функции в SQL я лишь высказал своё отношение к ним Улыбка
Если можно обойтись без них то я стараюсь ими не пользоваться.
12. Телевизор - 16 Февраля, 2011 - 22:18:55 - перейти к сообщению
В затруднении эм..., никто нечего не видел... тсссс...

Okula OrmaJever Мелкий
Спасибо что подсказали...
ну хоть всплыло такое бредонеразумение...
(Добавление)
что-то страшновато стало смотреть на другие скрипты
13. OrmaJever - 16 Февраля, 2011 - 22:29:49 - перейти к сообщению
Okula для записи даты в бд можно написать и 100 строк а толку? Нужно распределять нагрузку. В mysql для добавления пары часов к дате существует специальный синтаксис, а в php нужно изобретать веловипед.
А зачем тогда использовать поле timestamp? Давайте делать varchar(20) и парсить сложную дату в php...
14. Okula - 16 Февраля, 2011 - 22:52:13 - перейти к сообщению
OrmaJever, ну я например пишу дату в базу в секундах, мне намного удобнее так работать с ней.

 

Powered by ExBB FM 1.0 RC1