繁体   English   中英

对数据库Mysql中的行进行排序

[英]Sort rows in database Mysql

我的数据库有很多条目,在这里有一些朋友的帮助下,我设法删除重复行, 删除行中的mysql数据库,但现在我不得不面对新问题,即未排序的行。

这是我的数据库示例

CREATE TABLE `my_table` (
  `id` int(10) NOT NULL default '0',
  `name` varchar(255) NOT NULL default '',
  `address` varchar(255) NOT NULL default '',
  `phone` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

INSERT INTO `my_table` VALUES (784, 'Albert', 'EGYPT', '202020');
INSERT INTO `my_table` VALUES (21, 'John', 'USA', '984731');
INSERT INTO `my_table` VALUES (56, 'Albert', 'EGYPT', '343354');

正如您在id [784,21,56]看到的那样,有什么办法可以使我成为

INSERT INTO `my_table` VALUES (1, 'Albert', 'EGYPT', '202020');
INSERT INTO `my_table` VALUES (2, 'John', 'USA', '984731');
INSERT INTO `my_table` VALUES (3, 'Albert', 'EGYPT', '343354');

id [1,2,3,4,....etc]它,我知道ID的更改可能会在脚本本身中引起问题,因为它依赖于id来获取条目信息,但是由于它是新的,所以我需要对其进行排序1,2,3,4,.....等等。

如何在表格上放置自动增量呢?

CREATE TABLE `my_table` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL default '',
  `address` varchar(255) NOT NULL default '',
  `phone` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

然后,您只需要插入值而无需指定ID。

[编辑]

您也可以像这样对行进行排序, 而无需更改表结构中的任何内容

select @rownum:=@rownum+1 as rank, t.*
from my_table t, (SELECT @rownum:=0) r
order by rank;

我认为,如果您删除ID字段并重新创建(使用自动递增),这将解决您的问题。 但是我从来没有检查过,因此首先要备份您的数据库。

如果您确定要执行此操作,则可以确定删除id字段并再次添加(索引并使用自动增量)将对行进行重新编号。

不过,我不确定,因为这不是我做过的那种事情。 确定要这样做吗? 如果编号奇怪,那有什么关系?

另外,不能保证MySQL会按照您想要的方式对行进行重新编号-可能会使它们混乱。

如果要按国家或其他顺序对它们进行排序,则必须使用一些PHP并逐行更新行,这并不像听起来那样难。

使用AUTO_INCREMENT列:

CREATE TABLE `my_table` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL default '',
  `address` varchar(255) NOT NULL default '',
  `phone` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

然后插入:

INSERT INTO `my_table` VALUES ('Albert', 'EGYPT', '202020');
INSERT INTO `my_table` VALUES ('John', 'USA', '984731');
INSERT INTO `my_table` VALUES ('Albert', 'EGYPT', '343354');

这个问题( 使用php通过前端对数据库记录行进行重新排序 )确实可以满足您的要求,尽管它使用php来完成任务。

ts

M.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM