Help with sorting / ordering


#1

Hi! I hope someone can offer some insight or direction into a problem
I’m having.

In my application, I have two tables: products and reviews.

  • Products stores information on things that are sold
  • Reviews store comments from users that purchased the product, as well
    as boolean field about if they would purchase again.

The models are setup so that products has_many reviews and reviews
belong_to their respective products.

So my question is this:
How can I structure a query so that I can order products based on the
number of people who would purchase it again?

It’d be alot easier for me, and probably my server, if I just kept a
running count of those in the actual product record, but I’m trying to
keep it dynamic so that I can create custom reviewer sets elsewhere.

Thanks in advance for any direction.


#2

easiest and fastest way is to keep number of reviews in column in
product table… then simple add :order => ‘reviews_count desc’ in your
Product.find()

tom

Robert S. wrote:

belong_to their respective products.

So my question is this:
How can I structure a query so that I can order products based on the
number of people who would purchase it again?

It’d be alot easier for me, and probably my server, if I just kept a
running count of those in the actual product record, but I’m trying to
keep it dynamic so that I can create custom reviewer sets elsewhere.

Thanks in advance for any direction.

Tomas Meinlschmidt, MS {MCT, MCP+I, MCSE, AER}, NetApp Filer/NetCache

www.meinlschmidt.com www.maxwellrender.cz www.lightgems.cz


#3

Right, but that approach also means that I will be using all reviews for
all users.

The only reason I’m going through the hassle of trying to make it
dynamic is so that I could further segment the reviewers. So instead of
saying X reviewers would buy it again, I could get closer to X reviewers
in your age group would buy it again or X reviewers in your area, etc.
etc.

Tom Z Meinlschmidt wrote:

easiest and fastest way is to keep number of reviews in column in
product table… then simple add :order => ‘reviews_count desc’ in your
Product.find()

tom

Robert S. wrote:

belong_to their respective products.

So my question is this:
How can I structure a query so that I can order products based on the
number of people who would purchase it again?

It’d be alot easier for me, and probably my server, if I just kept a
running count of those in the actual product record, but I’m trying to
keep it dynamic so that I can create custom reviewer sets elsewhere.

Thanks in advance for any direction.

Tomas Meinlschmidt, MS {MCT, MCP+I, MCSE, AER}, NetApp Filer/NetCache

www.meinlschmidt.com www.maxwellrender.cz www.lightgems.cz


#4

OK. so then you need to create your own queries with
Reviews.find_by_sql() and insert appropriate sql statement, eg

select product_id, count(*) as counter from reviews where age between
(10,20) and … order by 2 desc

tom

Robert S. wrote:

Tomas Meinlschmidt, MS {MCT, MCP+I, MCSE, AER}, NetApp Filer/NetCache

www.meinlschmidt.com www.maxwellrender.cz www.lightgems.cz

Tomas Meinlschmidt, MS {MCT, MCP+I, MCSE, AER}, NetApp Filer/NetCache

www.meinlschmidt.com www.maxwellrender.cz www.lightgems.cz


#5

and don’t forget to add to reviews model:
belongs_to :product, :counter_cache => true

On Mar 13, 11:51 pm, Tom Z Meinlschmidt removed_email_address@domain.invalid