Задать вопрос
@User782
Кратко о себе

Присвоить id в обратном порядке?

Есть например такая база
id color
1 зеленый
2 красный
3 синий
4 белый

каким запросом можно сделать вот так:
4 зеленый
3 красный
2 синий
1 белый
  • Вопрос задан
  • 484 просмотра
Подписаться 3 Простой 7 комментариев
Пригласить эксперта
Ответы на вопрос 3
FanatPHP
@FanatPHP
Чебуратор тега РНР
Никаким.

Если шаловливые ручки тянутся потрогать id, то это может означать только две вещи
- либо надо надавать по ручкам линейкой и объяснить владельцу, что уникальный идентификатор - это не цыферька для красоты, а идентификатор, намертво привязанный к строке в БД, который никогда не меняется, и умирает вместе с ней.
- либо уникальный идентификатор для этой таблицы вообще не нужен, и его надо убрать
Ответ написан
orlov0562
@orlov0562
I'm cool!
Интересная задача, для собеседований самое-то. Самый простой способ сджойнить по счетчику строк

Схема базы
CREATE TABLE tmp (
  id INT,
  color VARCHAR(255)
);


Данные
INSERT INTO tmp 
  (id, color)
VALUES 
  (1, 'зеленый'),
  (2, 'красный'),
  (3, 'синий'),
  (4, 'белый')
;


Запрос
SELECT id, color FROM (
  SELECT 
    id,
    @join_pk_1:=@join_pk_1 + 1 as join_pk
  FROM tmp, (select @join_pk_1:=0) as join_pk_1
  ORDER BY id DESC
) as tbl1
LEFT JOIN (
  SELECT 
    color,
    @join_pk_2:=@join_pk_2 + 1 as join_pk
  FROM tmp, (select @join_pk_2:=0) as join_pk_2
) as tbl2
ON tbl1.join_pk = tbl2.join_pk


Результат
id 	color
4 	зеленый
3 	красный
2 	синий
1 	белый
Ответ написан
@sergix
Всё просто, можете сделать так, используйте только newID обозвав его как ID если надо, стерев второй столбец
select ROW_NUMBER() over (order by id desc) newID,id,color from

(
select      1 id, 'зеленый' color
union all select 2, 'красный'
union all   select 3, 'синий'
union all  select 4, 'белый'
) yourtable
order by id
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы