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

时间:2011-12-30 13:46:33

标签: php mysql

我有很多条目的数据库,在这里的一些朋友的帮助下,我管理如何删除重复行deleting-duplicate-rows-in-a-mysql-database,但现在我要面对未排序行的新问题。

这里是我的数据库的示例

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,.....等

5 个答案:

答案 0 :(得分:1)

如何在您的桌子上放置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;

然后你只需要插入值而不指定id。

<强> [编辑]

您也可以按照订购行,而不更改表格结构中的任何内容

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

答案 1 :(得分:1)

我认为如果您删除ID字段并再次创建(使用自动增量),这将解决您的问题。 但我从来没有检查过这个,所以首先备份你的数据库。

答案 2 :(得分:1)

如果你确定要这样做,我非常确定删除id字段并再次添加(索引和自动增量)将重新编号行。

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

此外,并不能保证MySQL会按照您想要的方式对行进行重新编号 - 它可能会将它们混杂起来。

如果您希望按国家/地区或其他方式订购,则必须使用一些PHP并逐个更新行,这听起来并不像听起来那么难。

答案 3 :(得分:1)

使用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');

答案 4 :(得分:1)

这个问题(Reorder the database record rows through front-end using php)完全符合你的要求,虽然它使用php来完成任务。

GRTS,

微米。