web-dev-qa-db-fra.com

Comment trier les valeurs dans les colonnes et mettre à jour la table?

Je suis complètement nouveau sur SQL et ne peux pas le faire moi-même. J'ai donc besoin de votre aide ... Je veux trier les valeurs dans la colonne puis enregistrer les modifications. Mais je ne sais pas comment faire ça.

La table ressemble à ça:

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

Je veux obtenir quelque chose comme ça:

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

Je dois donc trier les colonnes "id" et "name".

J'utilise l'instruction suivante pour trier les valeurs de la colonne "name":

SELECT * FROM games ORDER BY name ASC

Mais comment puis-je trier les valeurs de la colonne id et enregistrer les modifications dans la table? S'il vous plaît, aidez-nous.

13
Sabre

Vous devriez utiliser une deuxième table

  1. créer une nouvelle table games2 avec la même structure que votre table games, en s'assurant que l'ID est incrémenté automatiquement

    CREATE TABLE `games2` LIKE `games`;
    
  2. copier les données, triées, dans games2

    INSERT INTO `games2` (`Name`, `SomeDescription`) SELECT `Name`, `SomeDescription` FROM `games` ORDER BY `Name`
    
  3. déposer ou déplacer l'ancienne table

    -- DROP TABLE `games`;
    -- or
    RENAME TABLE `games` TO `games1`;
    
  4. renommer la nouvelle table en ancien nom

    RENAME TABLE `games2` TO `games`;
    

Ces étapes aboutiront à ce que vous voulez.

22
Umbrella

Vous pouvez utiliser la fonction de classement ROW_NUMBER pour renuméroter les lignes.

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

Vous pouvez utiliser la commande alter table, qui est plus simple.

mysql> ALTER TABLE games ORDER BY name asc;

C'est tout !

1

c'est simple. utilisez juste quelques codes. J'ai essayé cela et ça marche. commencez par créer une table temporaire tout en triant les valeurs en même temps.

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

puis déposez la table de jeux en utilisant,

    drop table games;

maintenant, créez à nouveau une table de jeux avec les mêmes propriétés et données

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

maintenant, laissez tomber la table temporaire 'nouveau'

    drop table new;

maintenant, vérifiez votre table. il faut trier.

1
Hemanth Nukala

vous pouvez trier sur deux champs en même temps.

SELECT *
FROM games
ORDER BY id DESC, name ASC

Je ne comprends pas ce que vous entendez par sauvegarder les changements dans le tableau. Le ORDER BY modifie simplement l'affichage; il ne modifie pas les données de la table sauf si vous effectuez une UPDATE.

Si vous ne connaissez pas bien SQL, de nombreux didacticiels en ligne peuvent vous aider:

Cours SQL

Tutoriel SQL pour débutant

Tutoriel SQL - Apprendre le SQL

Modifier en fonction des commentaires, cela peut être fait en une étape:

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
0
Taryn