我想使用 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 - CakePHP 正在将 MySQL 整数转换为字符串……搞乱了 rand() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4835849/