Is there any way to fatch all entities from table grouped by common property while loop?
Table storage looks like this
id | product_id | category_id -----------+-----------------------+-------------------------- 1 | 1 | 15 2 | 2 | 17 3 | 3 | 18 4 | 4 | 17 5 | 5 | 15 6 | 6 | 17 7 | 7 | 18
and final result supposed to look like this
id | product_id | category_id -----------+-----------------------+-------------------------- 1 | 1 | 15 2 | 2 | 17 3 | 3 | 18 4 | 5 | 15 5 | 4 | 17 6 | 7 | 18 7 | 6 | 15
What i want is this:
Select each record grouped by category id. It means, if table size is 3200, i need to select all of 3200 records grouped by category id in ASC order
Advertisement
Answer
You seem to want the values interleaved. You can use row_number()
in the order by
:
select s.* from storage s order by row_number() over (partition by storage_id order by id), storage_id;
Here is a db<>fiddle.
EDIT:
In older versions of MySQL, you can assign a sequential number within each group using variables and then use that for ordering:
select s.* from (select s.*, (@rn := if(@sid = storage_id, @rn + 1, if(@sid := storage_id, 1, 1) ) ) as seqnum from (select s.* from storage s order by storage_id, id) s cross join (select @rn := 0, @sid := -1) params ) s order by seqnum, id;
The SQL Fiddle has both methods.