Я пытаюсь выбрать группу списков и получить результаты с измененным порядковым номером.
например
Скажем, я выбрал имя = 'bob', таким образом, получил его идентификационные номера 4,5,7
Теперь я хочу, чтобы результаты были
в этом порядке 1, 2, 3...
вместо 4, 5, 7...
потому что он bob первый второй и третий, и т.д....
Какой самый простой способ сделать это?
Если вы используете Mysql 8, тогда вы можете использовать функцию window rank()
и общее выражение таблицы
with ordered_data as (
select *,
rank() over (partition by name order by id asc ) rnk
from your_table
order by rnk
)
select * from ordered_data where name = 'bob';
Или, если вы используете более старую версию, вы можете использовать коррелированный запрос для получения рейтинга
select a.id,a.name,
(select count(*)
from your_table
where name= a.name
and id <= a.id) rnk
from your_table a
where a.name = 'bob'
order by a.id;
Здесь переменные mysql могут выполнять эту работу. Объявите и инициализируйте переменную @a = 0
, назначьте добавочное значение и выберите в запросе. Запрос должен выглядеть так:
SET @a = 0;
SELECT @a := @a + 1 AS id, name FROM table_name WHERE name = 'bob';
SET @a = 0;
В конце, снова установите значение @a = 0
.