【发布时间】:2010-12-01 06:07:49
【问题描述】:
好吧,情况就是这样,我有一个用 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() not working - ZFForums.com
他们正在使用以下内容:
$res = $db->fetchAll(
'SELECT * FROM table ORDER BY :random',
array('random' => new Zend_Db_Expr('RANDOM()')
);
它有效...但我不希望通过键入它并在字符串上进行替换来构建我的选择语句,我试图将它保留在同一个 Zend_Db_Select 对象中。我还尝试将Zend_Db_Expr('RANDOM()') 传递到声明中的->order() 中,但它失败了。他还发布了一个寻找答案的理论解决方案,但我不打算重写其中的函数,修改 $db->fetch() 调用。
有什么想法吗?
【问题讨论】:
标签: php mysql sql-server zend-framework zend-db