Mysql
Mysql基於另一列的MAX順序編號
我有一個表 lp_pictures 有這些欄位:
[id | plate_uid] [1 | aaa] [1 | aaa] [1 | aaa] [1 | bbb] [1 | bbb] [1 | bbb]
我需要將欄位 id 更新為:
[id | plate_uid] [1 | aaa] [2 | aaa] [3 | aaa] [1 | bbb] [2 | bbb] [3 | bbb]
表結構為:
CREATE TABLE `lp_pictures` ( `id` int(5) NOT NULL, `plate_uid` varchar(128) NOT NULL, `uid` varchar(64) NOT NULL, `filename` varchar(128) NOT NULL, `extension` varchar(4) NOT NULL, `ip_submitted` varchar(15) NOT NULL, `date_submitted` datetime NOT NULL, `mode_submitted` varchar(15) NOT NULL, `ip_validated` varchar(15) NOT NULL, `date_validated` datetime NOT NULL, `user_validated` varchar(64) NOT NULL, `size` bigint(20) NOT NULL, `combination` varchar(9) NOT NULL, `type` varchar(15) NOT NULL, `oldtimer` tinyint(1) NOT NULL DEFAULT '0', `owner` tinyint(1) NOT NULL, `name` varchar(128) NOT NULL, `email` varchar(128) NOT NULL, `notify` tinyint(1) NOT NULL, `main` tinyint(1) NOT NULL, `source` varchar(512) NOT NULL, `comment` text NOT NULL, `meaning` text NOT NULL, `like` bigint(12) NOT NULL DEFAULT '0', `score` bigint(20) NOT NULL, `share` bigint(20) NOT NULL DEFAULT '0', `visible` tinyint(1) NOT NULL DEFAULT '1', `blocked` varchar(1) NOT NULL DEFAULT '0', `fb_post_id` varchar(128) DEFAULT NULL, PRIMARY KEY (`uid`)) ENGINE=MyISAM DEFAULT CHARSET=utf8
應根據 date_validated 欄位分配訂單。(降低到第一個日期)。
我需要一個 mysql UPDATE 指令。
非常感謝 !!
STEP 01 : 創建索引
date_submitted
ALTER TABLE lp_pictures ADD INDEX (date_submitted);
步驟 02:創建單獨的表以對
id
值進行排序CREATE TABLE lp_picture_ordering ( id INT NOT NULL AUTO_INCREMENT, plate_uid varchar(128) NOT NULL, uid varchar(64) NOT NULL, PRIMARY KEY (plate_uid,id), UNIQUE KEY uid (uid) ) ENGINE=MyISAM;
STEP 03 : 將表排序資訊載入到排序表中
INSERT INTO lp_picture_ordering (plate_uid,uid) SELECT plate_uid,uid FROM lp_pictures ORDER BY date_submitted;
STEP 04 : 執行 UPDATE JOIN
id
賦值UPDATE lp_pictures A INNER JOIN lp_picture_ordering B USING (uid) SET A.id = B.id;
STEP 05 : 刪除訂購表
DROP TABLE lp_picture_ordering;
注意事項
警告 #1
您需要添加 date_submitted 索引,以便按日期排序的檢索會很快
注意事項 #2
您只需要執行一次 STEP 01
警告 #3
STEP 02 為每個 plate_uid 創建增量值。此技術僅適用於 MyISAM 儲存引擎。在我之前的文章中,我建議在多列中使用 auto_increment 列
PRIMARY KEY
:
Apr 21, 2012
:你怎麼能在一張表中有兩個自動增量列?Jun 10, 2012
: MySQL 在沒有自動增量的情況下獲取下一個唯一值Feb 26, 2013
:如何在 MySQL phpmyadmin 中使用 2 個自動增量列Aug 28, 2013
:如何去建模關係的主要對象?警告 #4
在步驟 03 中,id 值由儲存引擎生成。
警告 #5
排序表包含帶有唯一鍵的 uid,以便步驟 04 可以執行內部聯接
警告 #6
完成後,無需保留訂購表。這就是我放棄它的原因。
警告 #7
如果您需要再次執行此操作,只需執行步驟 2-5
試一試 !!!