我有很多条目的数据库,在这里的一些朋友的帮助下,我管理如何删除重复行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,.....等
答案 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)