Помогите с удалением по дате в php и sql

Zion-i2
На сайте с 10.06.2011
Offline
108
824

Всем привет, очень нуждаюсь в подсказке, я сделал доску объявлений и вакансий для своего города и теперь нужно сделать удаление неактуальных объявлений. Я думал все получится, но что-то не получается...

В общем есть таблица с полем "date_end" в котором хранится дата до которой объявление будет актуальным. То есть нужно написать такой запрос, который будет удалять все объявления у которых дата в поле "date_end" равна или меньше сегодняшней. Я делаю так.

<?php

$result = mysql_query ("DELETE FROM announce WHERE date_end <= NOW()",$db);
if($result == true)
{
echo "Запрос выполнен!";
}else{
echo "Ошибка базы данных!";
}
?>

И так

<?php 

$date_now = date("d-m-Y");
$result = mysql_query ("DELETE FROM announce WHERE date_end <= '$date_now'",$db);
?>

Дата в базе хранится в формате: день, месяц, год 02-06-2013

Но проблема в том, что запросы выше удаляют объявления учитывая только день. То есть если у объявления стоит дата удаления 05-07-2013 а сегодня 04-06-2013 то объявление удалится, хотя не должно. Что я делаю не так или как можно по другому? Спасибо.

дани мапов
На сайте с 06.09.2012
Offline
204
#1

Так среднее число - день или все-таки месяц?

Написание и доработка скриптов (PHP, MySQL, JavaScript, jQuery) (/ru/forum/811046)
Zion-i2
На сайте с 10.06.2011
Offline
108
#2
дани мапов:
Так среднее число - день или все-таки месяц?

Месяц, а он удаляет в том случае если день меньше а то что месяц или год больше на то этот запрос уже внимание не обращает. И еще такой момент, у меня поле в котором хранится дата это варчар, просто если ставлю полю значение дата, то оно заносит туда дату только в формате год месяц день.

R
На сайте с 28.10.2010
Offline
20
#3

а каком тип данных поля поле "date_end" в базе данных ?

Ёхан Палыч
На сайте с 07.05.2006
Offline
169
#4

Так все правильно удаляет если в поле варчар. Приведите поле к нужному формату date.

sabotage
На сайте с 14.02.2007
Offline
192
#5
Zion-i2:
И еще такой момент, у меня поле в котором хранится дата это варчар

Ну и чего ты хочешь от DB? Ставь правильный тип, формировать дату из него можно в любом виде (это по теме заносит туда дату только в формате год месяц день )

Zion-i2
На сайте с 10.06.2011
Offline
108
#6
sabotage:
Ну и чего ты хочешь от DB? Ставь правильный тип, формировать дату из него можно в любом виде (это по теме заносит туда дату только в формате год месяц день )

Все изменил тип полю с варчар на дата, но теперь не логично выглядит дата 2013-06-02 и плюс у меня там уже было 400 актуальных обьявления а дата после изменения типа полю превратилась в 0000-00-00

sabotage
На сайте с 14.02.2007
Offline
192
#7

Zion-i2, вопрос в чем?

Ёхан Палыч
На сайте с 07.05.2006
Offline
169
#8

Надо было скриптиком переписать даты задом наперед

[Удален]
#9
Zion-i2:
Все изменил тип полю с варчар на дата, но теперь не логично выглядит дата 2013-06-02 и плюс у меня там уже было 400 актуальных обьявления а дата после изменения типа полю превратилась в 0000-00-00

Надеюсь бэкап базы есть? А то такая операция не обратима.

А по топику, держите даты в типе даты а не varchar как уже сказали выше. Но если никак иначе, то сделайте хотя бы формат ГГГГ-ММ-ДД т.е. типа 2013-06-02 тогда сравнение строк будет работать правильно. А в вашем случае происходит фигня удалиться может что угодно.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий