在Cakephp中从分组查询(mysql)中获取随机行
我有一个表“activities”,列按其三个属性分组。现在我想获取从所有组中随机选择的活动ID。查询如下:在Cakephp中从分组查询(mysql)中获取随机行,mysql,cakephp,Mysql,Cakephp,我有一个表“activities”,列按其三个属性分组。现在我想获取从所有组中随机选择的活动ID。查询如下: $act = $this->find('all', array('conditions' => $cond, 'limit' => $limit, 'fields' => array('count(*) as count, Activity.id as id'), 'page' => $page,
$act = $this->find('all', array('conditions' => $cond,
'limit' => $limit,
'fields' => array('count(*) as count, Activity.id as id'),
'page' => $page,
'group' => $group,
));
这些都是我尝试过的事情,但都没有成功。
1.创建应具有随机记录的自联接
$this->bindModel(array(
'belongsTo' => array(
'Random' => array(
'className' => 'Activity',
'order' => 'rand()',
'foreignKey' => 'id',
'fields' => 'Random.id'
)
)
));
这失败了,因为最后追加了rand顺序,这将使所有获取的活动随机化
添加了一个连接选项
'joins' => array(
array(
'table' => 'activities',
'alias' => 'Random',
'type' => 'LEFT',
'conditions' => array(
'Activity.id = Random.id'
),
'fields' => 'Random.id',
'order' => 'rand()'
)
这也不起作用,因为Cake未解析订单值
试图添加条件
'Activity.id>=floorrand*maxActivity.id-minActivity.id-minActivity.id'
给出了一个mysql错误
请帮助我解决问题假设您的查询正常:
$act = $this->find('all', array('conditions' => $cond,
'limit' => $limit,
'fields' => array('count(*) as count, Activity.id as id'),
'page' => $page,
'group' => $group,
'order' => 'rand()',
'limit' => '1' // if you only want one random activity ID
));
好的,我终于明白了。我们需要改变cake php的工作方式。代替表名,我编写了一个查询来获取随机排序的记录。还要注意连接类型为“right”。左连接不会生成随机排序的列表
$activities = $this->find('all', array('conditions' => $cond,
'page' => $page,
'limit' => $limit,
'fields' => array('count(*) as count, Random.id as id, max(Activity.modified) as Modified'),
'group' => $group,
'order' => 'Modified desc',
'joins' => array(
array(
'table' => '(select * from activities order by rand())',
'alias' => 'Random',
'type' => 'RIGHT',
'conditions' => array(
'Activity.id = Random.id'
),
)
)
));
Mysql返回分组活动中的第一个活动。我需要这是随机的所有分组行。你能给一个活动和组的样本数据吗?以及您的示例预期输出。你的问题有点令人困惑。