Grouping. Difficult find statement. Brain hurting

Hey guys,

I’m sure this is very simple but i just can’t figure it out.

I have profiles and each time a user visits a profile, the visit is
recorded in the following model…

profile_views
id
user_id #the id of the user who is visiting the profile
profile_user_id #the id of the user who is being visited
viewed_at

This is what I am trying to do (in sudo code)

Find all the visitors for a particular profile only returning each
visitor once and order the whole list by viewed_at

This would be an example list…

Mike, 1 min ago
Scott, 2 mins ago
Andy, 3 mins ago

etc etc

This is what I have do far…

@latest_visitors = ProfileView.find(:all, :conditions =>
[“profile_user_id = ?”, params[:id]], :order => ‘viewed_at DESC’, :limit
=> 5, :group => ‘user_id’)

This returns something along the line of what I want - it returns only 1
record for each user, but it returns the very first time that user
visited the profile.

Any ideas what I’m doing wrong?

Thank you!!

Try this:

@latest_visitors = ProfileView.find(:all,
:conditions => [“profile_user_id = ?”, params[:id]],
:select => ‘id, user_id, profile_user_id, max(viewed_at) viewed_at’,
:limit => 5, :group => ‘user_id’)

You’ll have to include any other fields you need in the “select” option.

Snowman wrote:

Try this:

@latest_visitors = ProfileView.find(:all,
:conditions => [“profile_user_id = ?”, params[:id]],
:select => ‘id, user_id, profile_user_id, max(viewed_at) viewed_at’,
:limit => 5, :group => ‘user_id’)

You’ll have to include any other fields you need in the “select” option.

That worked a treat! thank you!!

I added an ‘:order’ clause to it and it does everything i want.

Was it ok to add the ‘:order’ or is this bad form?

@latest_visitors = ProfileView.find(:all,
:conditions => [“profile_user_id = ?”, params[:id]],
:select => ‘id, user_id, profile_user_id, max(viewed_at)
viewed_at’,
:limit => 5, :group => ‘user_id’, :order => “viewed_at DESC”)

oops. Meant to add your updated code

Was it ok to add the ‘:order’ or is this bad form?

Can’t see any reason not to, if it does what you need. I should have
left it in but I didn’t pay close enough attention to the description of
what you were trying to achieve.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs