удаление старых объектов из таблицы [Joomla]

agruts

Новичок
удаление старых объектов из таблицы [Joomla]

задача такова: в силу особенностей шаблона на главной может быть опубликовано только определенной кол-во новостей, скажем 10.
насколько всем известно, публикованные на главной объекты помещаются в jos_content_frontpage. ( :) )
я сделал отдельный файл, который вызывается при обновлении главной страницы:

PHP:
<?php
//$query = "SELECT COUNT(*)"
//	. "\n FROM jos_content_frontpage" ;

$query = "SELECT COUNT(*) FROM jos_content_frontpage_ WHERE publush_up <= NOW ()";
	
	$database->setQuery( $query );
	$count = intval( $database->loadResult() );
	if ($count > 10) {

$limit = $count - 10;	
	
//$query="DELETE FROM jos_content_frontpage"
//		. "\n ORDER BY content_id ASC LIMIT $limit";

				
$query="DELETE FROM jos_content_frontpage WHERE publush_up <= NOW()"
 . "\n ORDER BY content_id ASC LIMIT $limit";

              $database->setQuery( $query );
                if (!$database->query()) {
   echo "<script> alert('".$database->getErrorMsg()."'); window.history.go(-1); </script>\n";
                               }
		}	
?>
При добавлении нового объекта в таблицу, наиболее старый по дате из нее удаляется, таким образом имеем постоянное кол-во объектов.
Но это работает только если в запросе нет WHERE publush_up <= NOW(). (см. закомметированные строки)
А этот параметр необходим, для того, чтобы не удалялись объекты из таблицы, если создан новый объект с запланированной публикацией, скажем на завтра в 08:00 (опубликованный, но не активный), который также помещается в таблицу, но не выводится на сайт до наступления определенной даты. Иначе, на главной будет отображаться меньше новостей, на столько, сколько объектов запланировано на публикацию.
если поставить в запрос SELECT_ "...WHERE publush_up <= NOW()" то все нормально, будущие не учитываются, но вот и старые, при наступлении момента публикации новых -не удаляются (запрос DELETE не работает).
Помогите разобраться, а то я уже тупеть начинаю :)

-~{}~ 03.03.09 22:40:

ОК, тогда по другому сформулирую вопрос:
кто-нибудь возьмется за решение этой задачи небезвозмездно?
(yandex.money, webmoney)

с предложениями пишите на agruts at mail dot ru
очень срочно надо
 

Heresy

Новичок
Я может не совсем понимаю о чём идет речь, но почему не сделать
[SQL]DELETE FROM jos_content_frontpage
WHERE publush_up <= NOW()
ORDER BY content_id DESC
LIMIT 10,1000000[/SQL]
? :)

P.S. А что будет, если не удалять старые записи? :)
 

agruts

Новичок
они хранятся в дух таблицах jos_content и jos_content_frontpage, в первой хранятся все объекты содержимого, а во втору помещаются только те, что публикуются на главной.
их конечно можно удалять вручную, в админке, но мне надо автоматизировать этот процесс.

т.е. как я понимаю - у меня был просто неправильно сформулирован запрос DELETE?
щас проверю.

-~{}~ 04.03.09 09:11:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 1000000' at line 1 SQL=DELETE FROM jos_content_frontpage WHERE publush_up <= NOW( ) ORDER BY content_id DESC LIMIT 10 , 1000000

такой запрос
PHP:
$query="DELETE FROM jos_content_frontpage WHERE publush_up <= NOW( ) ORDER BY content_id ASC LIMIT $limit";
тоже выдает ошибку:
Unknown column 'publush_up' in 'where clause' SQL=DELETE FROM jos_content_frontpage WHERE publush_up <= NOW( ) ORDER BY content_id ASC LIMIT 6

а вот так - работает:
PHP:
$query="DELETE FROM #__content_frontpage"
 . "\n ORDER BY content_id ASC LIMIT $limit";
но если создать новый объект содержимого, и задать начало публикации на будущее время, то он также помещается в jos_content_frontpage, но на главную не выводится до наступления указанного времени. При этом в запросе он также попадает в подсчет SELECT COUNT(*), в итоге получается пустое место на странице, а если запланировано десять, двадцать объектов - то на главной будет просто пустая дырка.
 

Semen

Семён
У тебя скрипт проверки количества новостей запускается при добавление новости на главную страницу с условием "WHERE publush_up <= NOW ()", тем самым есть возможность наличия новостей более установленного лимита
Я вижу 2 способа:
1. Проверять кроном;
2. Проверять при запросе главной странице.
 

agruts

Новичок
Semen не, он вызывается при вызове index.php

например:
сегодня 01.01.2009
есть 10 новостей с датой публикации до 01.01.2009 00:00
и есть 5 новостей с датой публикации от 03.01.2009
итого в таблице находятся 15 объектов, 5 из которых должны там и оставаться до наступления даты их публикации, и соответственно при запросе подсчета кол-ва объектов должны игнорироваться, как не попадающие под условие.
С другой стороны, до 03.01.2009 могут публиковаться и новые объекты, но с датой, которая меньше текущей ("=" даже нет смысла ставить, т.к. уже через секунду дата уже будет меньше) и по условию попадают в те самые 10 которые выводятся на страницу. Вот из этих, дата публикации которых меньше текущей даты, - а кол-во их в таблице, при добавлении новых может быть и больше 10, - должны удаляться наиболее старые по дате, так чтобы кол-во объектов с датой меньше текущей всегда было 10.

Это происходит при каждом вызове главной страницы. Может быть это и неправильно, но сам запрос не такой уж и большой, чтобы как-то нагрузить БД.


зы.можно по двум пунктам подробнее, если не трудно?

-~{}~ 04.03.09 17:59:

есть у кого возможность проверить это в самой CMS?
а то у меня пока только локально стоит. дистрибутив, если надо я дам
 

Heresy

Новичок
Я просто не понимаю, зачем их удалять, тем более так часто.
Что запрещает сделать:
[SQL]
SELECT * FROM jos_content_frontpage WHERE publush_up <= NOW() ORDER BY publish_up DESC LIMIT 10[/SQL]?
 

agruts

Новичок
Heresy, потому что в течении дня появляются пару десятков новых.

Я кажется нашел в чем проблема, чуть позже отпишусь. По моему я сам очень сильно затупил изначально. Проблема не в запросах совсем, скорее всего. Но надо проверить.
 

zerkms

TDD infected
Команда форума
конечно проблема не в запросах - проблема в задаче.
непонятно зачем вообще что-то удалять из базы.

потому что в течении дня появляются пару десятков новых.
ну и выбери только новые. ололо?
 

agruts

Новичок
zerkms да из базы ничего не удаляются. Просто jos_content_frontpage какбы временная, куда объекты не перемещаются а записывается их id и порядок.
в том то и проблема, что я сразу не доглядел что поля publish_up в этой таблице нет, и естественно - что там будет сортироваться по дате! :)))
вот я лоханулся!....

-~{}~ 05.03.09 08:28:

Semen навел на путь истинный. в терминале решил проверить запросом что получает, вот и увидел результат :)
 
Сверху