Требовать разумно случайных результатов из запроса SQL SELECT в статье Joomla (Cache включен) - PullRequest
0 голосов
/ 10 мая 2010

Настройка: веб-сайт Joomla в стеке LAMP

У меня есть таблица MySQL, содержащая некоторые записи, которые запрашиваются простым SELECT в статье Joomla, как показано ниже. На этом конкретном веб-сайте Joomla включено кэширование в глобальной конфигурации Joomla. Мне нужно рандомизировать порядок отображения результатов при каждой загрузке страницы.

Обычный php / mysql предложил бы мне два подхода для этого: 1. используйте метод order by RAND () или любой из нескольких методов, чтобы запрос SELECT мог возвращать достаточно случайные результаты. 2. как только php получит результат из SELECT в массив, перетасуйте массив, чтобы получить разумно случайный порядок элементов массива.

Однако, поскольку в этом экземпляре Joomla в глобальной конфигурации включено кэширование, любой из вышеперечисленных подходов завершается неудачей. При первой загрузке страницы порядок рандомизируется, однако дальнейшие перезагрузки не приводят к изменению порядка, поскольку страница доставляется из кэша. В тот момент, когда кэш отключен, оба подхода (случайный порядок / порядок по ранду) работают отлично. Что мне не хватает? Как переопределить глобальный кэш для этой конкретной статьи? Очень простое требование, которое удовлетворительно выполняются как php, так и mysql, блокируется кешем Joomla, который я не могу отключить.

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 голосов
/ 06 июня 2010

Полагаю, вы создаете компонент или как?

Можно рассмотреть возможность очистки вашего компонента из кэша (возможно, условно) после каждого запроса:

$cache =& JFactory::getCache('your-component-name');
$cache->clean();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...