我想使用CakePHP从数据库中随机抽取数据样本.这是我的功能:

function categories_list() 
{   
    $this->paginate['limit'] = 6;
    $this->paginate['order'] = '';
    $this->paginate['conditions'] = '';

    // Sort Randomly Start 
    if ($this->Session->check('Category.randomSeed')) 
    { 
        $seed = $this->Session->read('Category.randomSeed'); 
    } else { 
        $seed = mt_rand(); 
        $this->Session->write('Category.randomSeed', $seed); 
    } 
    $this->paginate['order'] = sprintf('RAND(%d)', $seed); 
    // Sort Randomly End 

    $this->set('cat_ajax_items', $this->paginate('Category')); 
}

问题是,Cake发送到数据库的查询始终会对RAND()部分执行此操作,从而使MySQL陷入混乱:

ORDER BY RAND(`1235123412341`)

通过手动查询进行测试,它可以正常工作,并在格式化后返回一个示例:

ORDER BY RAND(1235123412341)

有什么方法可以使Cake退出自动格式设置?我放入RAND()函数的所有内容都被转储到字符串引号中.


解决方法:

Anything I put into that RAND() function gets dumped into string quotes.

不,这是不正确的.如果它使用字符串引号,则可以正常工作,但是反引号不是字符串引号.问题是CakePHP引用数字时就好像它是列名一样.尝试使用单引号将值引起来:

"RAND('%d')"

这将导致生成以下SQL:

ORDER BY RAND('1235123412341')

与不包含引号的结果相同.

标签: php, mysql, random, cakephp

相关文章推荐

添加新评论,含*的栏目为必填