Thanks! This looks great.
On Aug 29, 4:12 am, grigri <[EMAIL PROTECTED]> wrote:
> // Get original by whatever method
> $original = $this->Game->findById($id);
> // Extract vars here for clarity
> $x = $original['Game']['X'];
> $y = $original['Game']['Y'];
> $z = $original['Game']['Z'];
> // Perform search
> $results = $this->Game->find('all', array(
> 'fields' => array(
> '*', // Specify normal fields here
> "(ABS(Game.X-$x)+ABS(Game.Y-$y)+ABS(Game.Z-$z)) AS difference'
> ),
> 'order' => 'difference ASC',
> 'limit' => 10
> ));
>
> This will retrieve the 10 closest games, using the L_0 (manhattan)
> metric like you were above.
>
> hth
> grigri
> On Aug 28, 8:16 pm, Un <[EMAIL PROTECTED]> wrote:
>
> > Each game in my games database has fields that represent dimensions.
> > They are simply numbers ranging from 0-7, basically "how X" or "how
> > Action-style" the game is. We'll call these fields X, Y, and Z.
>
> > I wish to create a search tool that finds other games that are most
> > similar to the inputted game (using the X, Y, and Z fields' numerical
> > values).
>
> > Below is my current solution. For each game, I proceed to compare each
> > numerical field. I will call our original game $original. Just take a
> > looksy:
>
> > function specialsearch($original) {
> > $games = $this->Game->find('all', array('fields'=>array('X', 'Y',
> > 'Z')));
> > foreach ($games as $game) {
> > $results[ $game['Game']['id'] ]['X'] = abs( $game['Game']['X'] -
> > $original['Game']['X'] );
> > //We'd repeat this for each field, Y, Z and so on...
>
> > $results[ $game['Game']['id'] ]['strength'] =
> > $results[ $game['Game']['id'] ]['X'] + $results[ $game['Game']['id'] ]
> > ['Y'] + $results[ $game['Game']['id'] ]['Z'];
> > }
>
> > //This is where we'd put all the logic for saving or returning the
> > results.
>
> > }
>
> > This should work well. We wind up with a distance from your original
> > in each dimension. So when we add them together, we find exactly how
> > dissimilar it is. 0 would be a game that's identical to this one, and
> > infinity would be the opposite of this game.
>
> > But this seems inefficient, especially if I want to display, for
> > example, 5 other games that are similar to this one on every "view"
> > action! Does anybody have a better solution?
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---