如何对列中的值进行排序并更新表?
我完全不熟悉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” 和 “名称” 列。
我用以下语句,“名称”列的值进行排序:
SELECT * FROM games ORDER BY name ASC
但如何才能使我的id列的值进行排序并保存在表的变化? 请帮忙。
你将不得不使用第二台
-
创建新表
games2
具有相同的结构,你的games
表,确保该ID自动递增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`;
将导致你想要的这些步骤。
您可以在两个字段上同时排序。
SELECT *
FROM games
ORDER BY id DESC, name ASC
我不明白你的意思是保存表中的变化。 ORDER BY
,只是改变显示器,你看它不会改变表中的数据,除非你执行UPDATE
。
如果你不熟悉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
您可以使用ROW_NUMBER排序函数对行重新编号。
SELECT UnsortedId = id
, SortedId = ROW_NUMBER() OVER (ORDER BY g.name, g.id)
FROM games
谢谢,这对我也有帮助。 – Sabre 2012-04-09 21:33:10
这很简单。只需使用一些代码。我试过这个,它正在工作。首先创建一个临时表,同时对值进行排序。
create table new as select * from games order by name;
,然后使用拖放游戏桌,
drop table games;
现在有相同的属性和数据作为新的(其中这里的排序是一个可选)再次使用创建的游戏桌,
create table games as select * from new order by name;
现在放下临时表'新'
drop table new;
现在检查你的表格。它必须被整理出来。
您可以使用更简单的alter table命令。
mysql> ALTER TABLE games ORDER BY name asc;
就这样!
当您对数据进行排序时,您不会更改数据,因此数据表永远不会以特定顺序返回数据。 – HLGEM 2012-04-09 20:59:14
为什么要保存数据库表排序? – MarioDS 2012-04-09 21:02:30
@MarioDeSchaepmeester这是一个悠久的历史。简而言之,我需要为我的应用程序。 – Sabre 2012-04-09 21:05:05