在Kohana 3中从数据库查询中获取一行随机数据

8

我正在使用Kohana 3的ORM模块,当我想从某个表中获取随机行时,在我的代码中应该使用什么查询,而不是显示数据库结果集的第一行?

2个回答

15

如果使用MySQL,您可以使用以下代码:

ORM::factory('some_model')->order_by(DB::expr('RAND()'))->find();

8
如果您正在使用MySQL,可以直接发出查询:
SELECT * FROM table LIMIT 1 ORDER BY RAND();

或者使用Kohona查询构建器

$this->db->from('table')->select('*')->limit(1)->orderby(null, 'RAND()')->get();

如果这是一个经常使用的查询,我甚至会考虑将其制作成存储过程,因为它不需要输入。 - Xeoncross
哎呀,忘了说我正在使用ORM。我们如何使用ORM来实现这个? :) - ed.
@Xeoncross:是的,那可能是个好主意。@ed:据我所知,你不需要这样做,ORM并不适合处理那种类型的事情。 - Alix Axel
你的解决方案有效,但仅因为order_by指令中的第二个参数未被转义或以其他方式受到SQL注入保护(应该是这样的!)。因此,“正确”的方法是通过Db:expr来完成。 - hamczu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接