在Cakephp中从分组查询(mysql)中获取随机行

在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,

我有一个表“activities”,列按其三个属性分组。现在我想获取从所有组中随机选择的活动ID。查询如下:

$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返回分组活动中的第一个活动。我需要这是随机的所有分组行。你能给一个活动和组的样本数据吗?以及您的示例预期输出。你的问题有点令人困惑。