需要Joomla文章中的SQL SELECT查询的合理随机结果(启用缓存)

时间:2010-05-10 11:44:38

标签: php mysql joomla

设置:LAMP堆栈上的Joomla网站

我有一个包含一些记录的MySQL表,这些记录是通过Joomla文章上的简单SELECT查询的,如下面粘贴的那样。这个特定的Joomla网站在Joomla的全局配置中启用了缓存。我需要随机化每次加载页面时显示结果集的顺序。

常规php / mysql会为我提供两种方法: 1.使用'按RAND()的顺序或任何一种方法允许SELECT查询返回合理随机的结果。 2.一旦php将SELECT中的结果导入数组,就可以对数组进行混洗,以获得合理随机的数组项顺序。

但是,由于此Joomla实例在其全局配置中启用了缓存,因此上述任一方法都会失败。第一次加载页面时,订单是随机的,但是任何进一步的重新加载都不会导致订单更改,因为页面是从缓存传递的。缓存被禁用的瞬间,两种方法(由rand进行shuffle / order)完美地工作。我错过了什么?如何覆盖此特定文章的全局缓存?一个非常简单的要求,即php和mysql都能很好地满足,被Joomla Cache阻止,我无法关闭。

返回数据库结果的php。

<pre>
$db = JFactory::getDBO();
$select = "SELECT id FROM jos_mytable;"; //order by RAND()
$db->setQuery($select);
echo $db->getQuery(); //Show me the Query!
$rows = $db->loadObjectList();
//shuffle($rows);
foreach($rows as $row) {
    echo "$row->id";
}

1 个答案:

答案 0 :(得分:0)

我猜你是在创建一个组件还是什么?

您可以考虑在每次请求后从缓存中清理您的组件(可能是有条件的):

$cache =& JFactory::getCache('your-component-name');
$cache->clean();