mysql - Performing a GROUP_BY after an ORDER_BY in Eloquent -
i have situation need
- order results based on order logic
- 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
Post a Comment