On Jan 6, 9:28 pm, Alex Ciobanu <ics.cake...@gmail.com> wrote:
> On 1/6/2011 9:26 PM, Nicolas400 wrote:
>
> > Hi, I want a function that return me a Random Article from my Model.
>
> > I guess all I need is the Find Method, but how do I know how this
> > random number will match an existing ID ??
>
> > I'm really stuck.
>
> > because if I had 3 articles (1,2,3) i want to get a random Id within
> > those numbers, but if I have 100000 articles is diferent.!!
>
> Why don't you try something like:
>
> $this->Model->find('first', array('order' => 'RAND()'));

ORDER BY RAND() isn't really appropriate unless you've got a trivial
amount of data.

A much less db intensive approach would be something like this:

max = select max(field) from table
select * from table WHERE field >= ${rand(1, max)} ORDER BY field ASC
LIMIT 1

OR

select * from table ORDER BY (field >= ${rand(1, max)}) DESC, field
ASC LIMIT 1

If you're use case is more demanding/complex than that here's a
behavior which does the above using a field named "random" and even
allows you to paginate 'random' data:
https://github.com/AD7six/mi/blob/master/models/behaviors/random.php

AD

Check out the new CakePHP Questions site http://cakeqs.org and help others with 
their CakePHP related questions.

You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to
cake-php+unsubscr...@googlegroups.com For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en

Reply via email to