Storing it in a column also makes the query faster.

On Thu, Sep 4, 2008 at 8:32 AM, David C. Zentgraf <[EMAIL PROTECTED]> wrote:
>
> I know this would be a lot easier for working with Cake, but the
> purist in me says it's just the wrong way to store the data.
> With raw SQL it's a no-brainer on how to make it work.
> I'm willing to wait for Cake to catch up to easily allow more
> complicated JOIN queries/conditions/order clauses, and the workaround
> in the meantime isn't that terrible... ;o)
>
> Chrs,
> Dav
>
> On 4 Sep 2008, at 19:35, Adam Royle wrote:
>
>>
>> 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
-~----------~----~----~----~------~----~------~--~---

Reply via email to