Dle, удаление старых новостей

C7
На сайте с 25.01.2009
Offline
107
1596

Здравствуйте.

Допустим, у меня на сайте порядка 15 к новостей. Часть из них за последние 3 года обновлялась и редактировалась, а другая вроде как представляет из себя брахло ненужное.

Какой запрос сделать к базе данных, чтобы были удалены все новости, которые не редактировались за последние 3 года? Если конечно такое возможно.

Заранее спасибо тому, кто откликнется.

Лично я учился создавать и зарабатывать на сайте здесь - манимастер (http://www.moneymaster.ru/?chess77)
psics
На сайте с 02.04.2009
Offline
130
#1

кажется в dle есть оптимизация бд, там можно выбрать от какой даты сохранить посты.

p.s. могу ошибаться...

/admin.php?mod=clean

C7
На сайте с 25.01.2009
Offline
107
#2
psics:
кажется в dle есть оптимизация бд, там можно выбрать от какой даты сохранить посты.
p.s. могу ошибаться...
/admin.php?mod=clean

Дело в том, что мне нужно не удалить все старые посты, а удалить те посты, которые не обновлялись за последние 3 года.

Смотрите, при покупке сайта было, например, 12к новостей. Большинство из них были криво оформлены, либо вообще не несли полезной информации. Старые новости по возможности исправлялись и добавлялись новости. Но, за эти 3 года до некоторых новостей так руки и не дошли, потому хотелось бы их удалить каким-нибудь простеньким запросом к базе данных.

C7
На сайте с 25.01.2009
Offline
107
#3

Неужели нет никаких мыслей?

psics
На сайте с 02.04.2009
Offline
130
#4

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

C7
На сайте с 25.01.2009
Offline
107
#5
psics:
скрипт в бд, по моему в дле есть дата последнего изменения

Я вот тоже почему-то думаю, что достаточно будет 1 обращения к базе данных, но увы php не владею и надеялся по помощь. 😒

R
На сайте с 20.02.2015
Offline
59
#6

Выборку по диапазону дат сделайте и посмотрите какие посты выведет.


select * from `dle_post` where date(date) between '2011-01-01' and '2015-04-15'

'2011-01-01' and '2015-04-15' диапазон дат yyyy-mm-dd

Если эти посты не нужны то делать запрос на удаление.


delete a.*, b.*
from dle_post a
left join dle_post_extras b
on b.news_id = a.id
where date(date) between '2011-01-01' and '2015-04-15'
psics
На сайте с 02.04.2009
Offline
130
#7

предварительно сделай бекап, надеюсь не поздно сказал)

C7
На сайте с 25.01.2009
Offline
107
#8
rereg:
Выборку по диапазону дат сделайте и посмотрите какие посты выведет.

select * from `dle_post` where date(date) between '2011-01-01' and '2015-04-15'

'2011-01-01' and '2015-04-15' диапазон дат yyyy-mm-dd
Если эти посты не нужны то делать запрос на удаление.

delete a.*, b.*
from dle_post a
left join dle_post_extras b
on b.news_id = a.id
where date(date) between '2011-01-01' and '2015-04-15'

Если я правильно понимаю код, то это удаление новостей созданных в определенный промежуток времени. Мне же нужно сделать так, что удалялись новости не по времени создания, а по времени последнего редактирования.

R
На сайте с 20.02.2015
Offline
59
#9
chess777:
Если я правильно понимаю код, то это удаление новостей созданных в определенный промежуток времени. Мне же нужно сделать так, что удалялись новости не по времени создания, а по времени последнего редактирования.

Да, так и есть.. раз надо время редактирования тогда как то так:


select * from dle_post_extras
join dle_post on dle_post_extras.news_id = dle_post.id
where editdate < UNIX_TIMESTAMP('2015-04-15 12:00:00') and editdate != 0

Где UNIX_TIMESTAMP('2015-04-15 12:00:00') не больше даты.

Удалить 4 запроса:


delete from dle_tags where news_id in (select news_id from dle_post_extras where editdate < UNIX_TIMESTAMP('2015-04-20 12:00:00') and editdate != 0)


delete from dle_post_log where news_id in (select news_id from dle_post_extras where editdate < UNIX_TIMESTAMP('2015-04-20 12:00:00') and editdate != 0)


delete from dle_post where id in (select news_id from dle_post_extras where editdate < UNIX_TIMESTAMP('2015-04-20 12:00:00') and editdate != 0)


delete from dle_post_extras where editdate < UNIX_TIMESTAMP('2015-04-20 12:00:00') and editdate != 0


---------- Добавлено 15.04.2015 в 20:51 ----------

Бекап БД сделайте обязательно, что бы мы не увидели топик "Как восстановить БД" :)
siv1987
На сайте с 02.04.2009
Offline
427
#10
chess777:
Если я правильно понимаю код, то это удаление новостей созданных в определенный промежуток времени. Мне же нужно сделать так, что удалялись новости не по времени создания, а по времени последнего редактирования.

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

delete a.*, b.*

from dle_post a

left join dle_post_extras b

on b.news_id = a.id

where editdate > 0 AND editdate < UNIX_TIMESTAMP(NOW() - INTERVAL 3 YEAR)

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