php–Zend_Db_Select按随机顺序排列,兼容mssqlmysql

php–Zend_Db_Select按随机顺序排列,兼容mssqlmysql,第1张

概述好的就是这种情况,我有一个用Zend_Framework编写的应用程序,它兼容MySQL和MSSQL作为后端.现在,ZF非常擅长解决这两种语言之间的许多SQL差异/差异,但我还没有想出这个.目标是从表中选择1个随机记录,这是一个非常简单的陈述.这是一个select语句,例如:$sql = $db->select() ->from('t

好的就是这种情况,我有一个用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()'));

它工作…但我不打算通过键入它并对字符串进行替换来构建我的select语句,我试图将它保存在相同的Zend_Db_Select对象中.我也尝试将Zend_Db_Expr(‘RANDOM()’)传入语句中的 – > order(),但它失败了.他还发布了一个理论解决方案来找到答案,但我不打算重写这个函数,修改$db-> fetch()调用.

有任何想法吗?

最佳答案您可以快速将函数抽象到表中 – 谁知道它正在使用哪个适配器:

class Mytable extends Zend_Db_table_Abstract {   public function randomSelect($select=null) {     if ($select === null) $select = $this->select();     if (!$select instanceOf Zend_Db_Select) $select = $this->select($select);     $adapter = $this->getAdapter();     if ($adapter instanceOf Zend_Db_Adapter_MysqLi) {       $select->order(new Zend_Db_Expr('RAND()'));     } else if ($adapter instanceOf Zend_Db_Adapter_Dblib) {       $select->order(new Zend_Db_Expr('NEWID()'));     } else {        throw new Exception('UnkNown adapter in Mytable');     }     return $select;  }}$someSelect = $table->select();// add it to an existing select$table->randomSelect($someSelect);// or create one from scratch$select = $table->randomSelect();

另外,我在某个地方找到了一篇我遗失的文章,建议尝试以下方法:

$select->order(new Zend_Db_Expr('0*`ID`+RAND()));

颠覆MSsql的查询优化器并欺骗它计算每一行的新值. 总结

以上是内存溢出为你收集整理的php – Zend_Db_Select按随机顺序排列,兼容mssql / mysql全部内容,希望文章能够帮你解决php – Zend_Db_Select按随机顺序排列,兼容mssql / mysql所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/1167842.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-01
下一篇2022-06-01

发表评论

登录后才能评论

评论列表(0条)

    保存