我是瘦身框架的新手,我使用这个PHP代码来获取随机项目
function getItems()
{
$app = \Slim\Slim::getInstance();
try {
$items = \ORM::for_table('item')->order_by_expr('rand()')->limit(30)->find_array();
} catch (Exception $e) {
$app->firephp->error($e);
$items = array();
}
return array(
'Items' => $items
);
}
但这是如何让我获得快速结果?
谢谢。答案 0 :(得分:1)
你不能。
当您使用ORDER BY RAND()
时,加载然后按随机化函数排序整个结果集,然后然后将结果限制为30.您的查询从根本上来说效率低下。
您可以更好地从表中获取所有ID,在结果数组上使用shuffle
,然后使用array_slice
获取随机化结果的前30个ID。或者您可以在循环中使用array_rand
三十次来构建选择数组。然后可以在某种WHERE IN
子句中使用它。
另一个选项是子查询,只选择在子查询中随机排序的ID。