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.
Vous devriez utiliser une deuxième table
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`;
copier les données, triées, dans games2
INSERT INTO `games2` (`Name`, `SomeDescription`) SELECT `Name`, `SomeDescription` FROM `games` ORDER BY `Name`
déposer ou déplacer l'ancienne table
-- DROP TABLE `games`;
-- or
RENAME TABLE `games` TO `games1`;
renommer la nouvelle table en ancien nom
RENAME TABLE `games2` TO `games`;
Ces étapes aboutiront à ce que vous voulez.
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
Vous pouvez utiliser la commande alter table, qui est plus simple.
mysql> ALTER TABLE games ORDER BY name asc;
C'est tout !
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.
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:
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