Как сортировать значения в столбцах и таблице обновлений?

Я полностью новичок в sql и не могу сделать это сам. Поэтому мне нужна твоя помощь. Я хочу сортировать значения в столбце, а затем сохранять изменения. Но я не знаю, как это сделать.

Таблица выглядит так:

Id | Name | SomeDescription
---------------------------
1  |Best  | Description1
2  |Worth | Description2
3  |Good  | Description3

Я хочу получить что-то вроде этого:

Id | Name | SomeDescription
---------------------------
1  |Best  | Description1
2  |Good  | Description3
3  |Worth | Description2

Поэтому мне нужно отсортировать столбцы "id" и "name".

Я использую следующую инструкцию для сортировки значений столбца "name":

SELECT * FROM games ORDER BY name ASC

Но как я могу сортировать значения столбца id и сохранять изменения в таблице? Пожалуйста, помогите.

Ответ 1

Вам нужно будет использовать вторую таблицу

  • создайте новую таблицу games2 с той же структурой, что и ваша таблица games, удостоверяясь, что идентификатор автоматически увеличивается

    CREATE TABLE `games2` LIKE `games`;
    
  • скопируйте данные, отсортированные, в games2

    INSERT INTO `games2` (`Name`, `SomeDescription`) SELECT `Name`, `SomeDescription` FROM `games` ORDER BY `Name`
    
  • удалить или переместить старую таблицу

    -- DROP TABLE `games`;
    -- or
    RENAME TABLE `games` TO `games1`;
    
  • переименовать новую таблицу в старое имя

    RENAME TABLE `games2` TO `games`;
    

Эти шаги приведут к тому, что вы хотите.

Ответ 2

Вы можете использовать функцию ранжирования ROW_NUMBER для нумерации строк.

SELECT UnsortedId = id
, SortedId = ROW_NUMBER() OVER (ORDER BY g.name, g.id)
FROM games 

Ответ 3

это просто. просто используйте несколько кодов. Я пробовал это, и он работает. сначала создайте временную таблицу, одновременно сортируя значения.

    create table new as select * from games order by name;

а затем отпустите таблицу игр, используя

    drop table games;

теперь снова создайте таблицу игр с теми же свойствами и данными, что и в новом (где сортировка здесь является необязательной), используя

    create table games as select * from new order by name;

теперь отмените таблицу temp "new"

    drop table new;

теперь проверьте свою таблицу. он должен быть отсортирован.

Ответ 4

Вы можете использовать команду alter table, которая проще.

mysql> ALTER TABLE games ORDER BY name asc;

Что все!

Ответ 5

вы можете сортировать по два поля одновременно.

SELECT *
FROM games
ORDER BY id DESC, name ASC

Я не понимаю, что вы подразумеваете, сохраняя изменения в таблице. ORDER BY, просто меняет отображаемый вами дисплей, не меняет данные в таблице, если вы не выполняете UPDATE.

Если вы не знакомы с SQL, в Интернете есть много обучающих программ, которые могут помочь:

Курс SQL

Начальный учебник по SQL

Учебник по SQL - Изучите SQL

Изменить на основе комментариев, это можно сделать за один шаг:

create table #temp
(
    id int,
    name varchar(50),
    somedesc varchar(50)
)

insert into #temp values (1, 'best', 'desc1')
insert into #temp values (2, 'worth', 'desc2')
insert into #temp values (3, 'good', 'desc3')

update t1
SET t1.id = t2.rn
    , t1.somedesc = t1.somedesc
FROM #temp t1
JOIN 
(
    select id, name, somedesc, row_number() over(order by name, id) as rn
    from #temp 
) t2
on t1.id = t2.id

select *
from #temp
order by id

drop table #temp

Ответ 6

Это мое исправление... глупо просто

  1. Извлечь во временную таблицу

SELECT SortKeyValue (добавить любые другие фиксированные значения, просто не включайте существующую последовательность) INTO #Temp FROM SourceTable;

  1. Очистить стол:

TRUNCATE TABLE SourceTable

  1. Заново:

INSERT INTO SourceTable (SortKeyValue, DisplayOrder (плюс другие поля)) SELECT SortKeyValue, ROW_NUMBER() OVER (ORDER BY SortKeyValue) AS DispOrd (плюс другие поля) FROM #Temp;

  1. Готово!

Ответ 7

SQL > SELECT * FROM games    ORDER BY ID, NAME;