Это сложно в MySQL.Идея состоит в том, чтобы перечислить строки и затем упорядочить по этому перечислению:
select c.*
from (select c.*,
(@rn := if(@sc = site_car, @rn + 1,
if(@sc := site_car, 1, 1)
)
) as rn
from (select c.*
from car c
order by site_car, id_car
) c cross join
(select @sc := -1, @rn := 0) params
) c
order by rn, field(site_car, 'onesite', 'twosite', 'threesite');
Кстати, в MySQL 8 + это намного проще:
select c.*
from car c
order by row_number() over (partition by site_car order by id_car),
field(site_car, 'onesite', 'twosite', 'threesite');