MySQL - 如何更改表中行的顺序

时间:2011-04-19 00:46:46

标签: php mysql sql sql-order-by

如何更改行的顺序,以便按custom_field排序行?

例如,我有一个id为asc的表,并希望以desc顺序排列。我需要它,以便不使用mysql查询中的'order by id desc'来优化查询速度。

我试过了:

insert table_with_ordered_rows() 
select * from table_with_not_ordered_rows order by id desc;

但它只是用标准的asc命令复制表。

3 个答案:

答案 0 :(得分:3)

在mysql中获取排序结果集的唯一方法是在查询中添加ORDER BY

  

在mysql查询中优化查询速度。

这是不正确的。如果您遇到查询性能问题 - 请询问查询性能。给我们完整的表格结构,查询,数据的解释和统计。

答案 1 :(得分:1)

ALTER `tablename` ORDER BY `orderField` DESC;

但是每次插入后都必须执行此查询。请参阅13.1.7. ALTER TABLE Syntax

答案 2 :(得分:1)

保证结果集中顺序的唯一方法是使用ORDER BY子句。 ORDER BY可以使用索引(如果存在...)

那就是说,以下对MySQL 5.1.49起作用了:

CREATE TABLE `t1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `col` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1$$

INSERT INTO t1 (col) VALUES ('a'),('b'),('c');

结果集:

id  col
--------
1   a
2   b
3   c

中级表:

CREATE TABLE `t2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `col` varchar(45) DEFAULT NULL,
  `old_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1$$

INSERT INTO t2 (col, old_id)
  SELECT t.col, t.id
    FROM t1 t
ORDER BY t.id DESC

结果集:

id  col  old_id
----------------
1   c    3
2   b    2
3   a    1