Идея решения заключается в том, чтобы номера строк были пронумерованы от 1 и выше в зависимости от поставщика.если строки с типом 'a', где пронумерованы от 1..4, и строки с типом 'b', где пронумерованы от 1 ..3 и строки с типом 'c', где пронумерованы от 1..3, то вы можете легко получить то, чтоВы хотели с помощью «Order By» на этих числах.
для примера, я предполагаю, что ваша таблица называется «my_table» и имеет два поля: тип и данные.
, чтобы сделать rownum в mysql, я буду использовать то, что былоздесь описано: rownum в mysql
Теперь давайте предположим, что мы хотим выбрать все строки с типом 'a' и дать им возрастающий номер строки.мы можем сделать это следующим образом:
select type,data,@rownuma := @rownuma+1 as order_num
from my_table,(select @rownuma:=0) ra
where type='a'
мы можем сделать то же самое для других типов, затем объединить все результаты, а затем обернуть их во внешний выбор, который выполняет упорядочение.ответом на ваш вопрос будет следующий запрос:
select type,data
from
(
select type,data,@rownuma := @rownuma+1 as order_num
from my_table,(select @rownuma:=0) ra
where type='a'
union all
select type,data,@rownumb := @rownumb+1 as order_num
from my_table,(select @rownumb:=0) rb
where type='b'
union all
select type,data,@rownumc := @rownumc+1 as order_num
from my_table,(select @rownumc:=0) rc
where type='c'
) in_tab
order by order_num,type
обратите внимание, что для каждого типа мы определяем различную переменную для счетчика.
в качестве заключительного примечания, вы можете сделать этос определением всех счетчиков в одном соединении, а затем вы не используете объединение всех, но вместо этого в выборе можно использовать правильную переменную, основанную на типе.ниже приведен равный запрос
select type,data
from
(
select type,data,
case when type='a' then @rownuma := @rownuma+1
when type='b' then @rownumb := @rownumb+1
when type='c' then @rownumc := @rownumc+1
end as order_num
from my_table, (select @rownuma:=0) ra, (select @rownumb:=0) rb, (select @rownumc:=0) rc
) in_tab
order by order_num,type
вторая версия еще лучше, если у вас есть больше условий (условие where) для выбора строк, поскольку вам не нужно будет повторять их в каждом подзапросе, который является частьюсоюза в первой версии.