好吧,情况就是这样,我有一个用 Zend_Framework 编写的应用程序,它与 MySQL 和 MSSQL 作为后端兼容。现在,ZF 非常擅长解决两种语言之间的许多 SQL 差异/差异,但我还没有弄清楚这一点。
目标是从表中随机选择 1 条记录,这是一个非常简单的语句。
例如,这里有一个 select 语句:
$sql = $db->select()
->from("table")
->order("rand()")
->limit(1);
这非常适用于 MySQL 数据库表,因为 MySQL 的 sql 如下:
SELECT `table`.* FROM `table` ORDER BY rand() ASC
另一方面,现在 MSSQL 使用newid()函数进行随机化。
是否有某种帮助我可以传递给order()函数以使其意识到它必须使用正确的排序?我搜索了文档并在 zfforums 上找到了一些提示,但没有什么可靠的。
我确实发现的一件事是:
ORDER BY RANDOM() 不起作用- ZFForums.com
他们正在使用以下内容:
$res = $db->fetchAll(
'SELECT * FROM table ORDER BY :random',
array('random' => new Zend_Db_Expr('RANDOM()')
);
它可以工作......但我不希望通过键入它并在字符串上进行替换来构建我的选择语句,我试图将它保留在同一个 Zend_Db_Select 对象中。我也尝试过将 in 传递Zend_Db_Expr('RANDOM()')
到->order()
on 语句中,但它失败了。他还发布了一个寻找答案的理论解决方案,但我不打算重写其中的函数,修改 $db->fetch() 调用。
有任何想法吗?