I would add a "average_rating" field in your "places" tables, then whenever you receive a rating, update the Places table...
Here is some example code that I wrote for this site: http://bigfish.tv/fest/ class Rating extends AppModel { var $belongsTo = array( 'Film' => array('className' => 'Film', 'foreignKey' => 'film_id') ); // recalculate the average rating for the film function afterSave($created) { $rating_average = $this->field('AVG(rating)', array('film_id' => $this->data['Rating']['film_id'])); $this->Film->saveField(array('id' => $this->data['Rating'] ['film_id'], 'rating_average' => $rating_average)); } } On Sep 4, 5:57 pm, David Christopher Zentgraf <[EMAIL PROTECTED]> wrote: > Hi, > > I was wondering if anybody has thought about adding support for > "manual sorting" to Cake. > In my specific case, I need to paginate a model and want to order it > by the average score of ratings that are stored in another table > (Place hasMany Rating; ORDER BY AVG(Rating.score)). The best solution > I found so far, next to writing my own paginator, was to add a > condition like this to the paginate conditions: > > 1 = 1 ORDER BY FIELD(`Place`.`id`, 128, 97, ... ) DESC > > where I'm getting the list of ids in a separate query in the right > order. > This works fine, but since I don't like the "1 = 1 hack" I was > wondering if there's a chance to get something like this into Cake: > > find('all', array('order' => array('Place.id' => array(1, 2, > 3, ... )))); > > which would produce the above ORDER BY clause. I think that might come > in handy in other situations as well. > > Chrs, > Dav --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "CakePHP" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/cake-php?hl=en -~----------~----~----~----~------~----~------~--~---
