mysql - Performing a GROUP_BY after an ORDER_BY in Eloquent -


i have situation need

  1. order results based on order logic
  2. group first result after order.

i have 2 tables objects , object_versions

each object can have several versions , 2 tables linked through

objects.id = object_versions.id

my order logic following abs(object_versions.size - $somenumber) works great ordering issue without group by still other versions in results. see scenarios , fiddle http://www.sqlfiddle.com/#!2/a967b/23


query 1 (correct results without grouping)


sql

select    objects.id object_id,    object_versions.id object_versions_id,    object_versions.size object_versions_size objects inner join object_versions on objects.id = object_versions.id order abs(object_versions.size - 1000) asc; 

eloquent

object::join('object_versions', 'objects.id', '=', 'object_versions.id') ->orderbyraw("abs(width - ?) asc", [1000]) ->select('objects.id object_id', 'object_versions.id object_versions_id', 'object_versions.size object_versions_size')->get(); 

results

id  id  size 1   1   800 2   2   800 2   2   400 1   1   400 2   2   300 1   1   300 

query 2 (bad results produced grouping before order)


sql

select    objects.id object_id,    object_versions.id object_versions_id,    object_versions.size object_versions_size objects inner join object_versions on objects.id = object_versions.id group object_id order abs(object_versions.size - 1000) asc; 

eloquent

object::join('object_versions', 'objects.id', '=', 'object_versions.id') ->orderbyraw("abs(width - ?) asc", [1000]) ->groupby("objects.id") ->select('objects.id object_id', 'object_versions.id object_versions_id', 'object_versions.size object_versions_size')->get(); 

results

id  id  size 1   1   300 2   2   300 

query 3 (correct results grouping after order don't see how produce in eloquent)


sql

select * (   select      objects.id object_id,      object_versions.id object_versions_id,      object_versions.size object_versions_size   objects   inner join object_versions on objects.id = object_versions.id   order abs(object_versions.size - 1000) asc ) result  group object_id; 

eloquent don't see how this...

results

1   1   800 2   2   800 


Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -