2016-04-14 22 views
1

私は自分の問題と質問の概要を説明します。テーブルの主キーIDを作成日の順に変更する

問題:

私は、MySQLデータベースからの私の記事をエクスポートしたが、元の主キーIDを保持していませんでした。私は別のデータベースに転送し、それは混乱した。問題は、作成日の列がtable_contentsの主キーIDに基づいて順序どおりでないことです。その他の情報PKは自動的にインクリメントされます。下図を参照してください:あなたが見ることができるように

Table sorted by ID

を、作成した日付はすべての年代順ではありません。今、私が作成した日付でテーブルをソートする場合:

Table sorted by Created Date

ID年代が順番にもありません。

考えられる解決策:

私は手動でテーブル内のすべての単一の項目を編集し直すことができ、それは長い時間がかかるだろう。

私の思考:

私はSQLでの初心者ですが、私は私がやりたい書くことができますSQLクエリのどのような?私は、table_contentsのコピーを作成し、元のものとコピーしたものをマージし、作成した日付順にIDを変更しなければならないと考えていました。私はどのように正直にクエリを書くか分からない。

私の質問:

がどのようにコンテンツ作成日付列で時系列順に昇順されるように、主キーのID列を変更するクエリを書くのでしょうか?

閉鎖:

私は不明確だか、これが不可能な場合は私に教えてください。ありがとうございました!

編集:だからフィードバックからこれまでのところ、私は、クエリを書いてみました:

ALTER TABLE skwx_content; 
SELECT @row_num := @row_num + 1 as newid, skwx_content.id from skwx_content , (select @row_num := 0) x order by skwx_content.created asc 
ALTER TABLE skwx_content DROP PRIMARY KEY; 
ADD COLUMN newid INT(10) NOT NULL AUTO_INCREMENT FIRST ORDER BY skwx_content.created ASC, 
ADD PRIMARY KEY (newid); 
ALTER TABLE skwx_content CHANGE newid id INT(10); 

私はエラーを取得しようとしたものと:puu.sh/ohBAC/c3a8b12340.png

答えて

0

updateを使用し、 order byにはuser variableが含まれます。上記のSQL文を実行した後、あなたのデータを照会し、とにかくそれを並べ替えることができますよう、主キーが他の列に順番にする必要はありませんが

set @max_id = (select max(id) from mytable); 
set @id = @max_id; 
update mytable set id = (@id := @id + 1) order by created; 
update mytable set id = id - @max_id; 

、idが1

+0

こんにちは、私は正しくクエリを実行していますか?私は画像に見られるようにエラーが発生します。 paramとユーザ定義の変数についてのリファレンスも私にリンクできますか? http://prntscr.com/as02qi – Roys

+0

こんにちは、私はそれを試して、それはIDがすでにその外部キーのために存在すると言ってのエラーを与えた。 "キー 'PRIMARY'に重複するエントリ '3'。私は自分の投稿に編集を加えましたが、コードのクエリを見てください。 – Roys

+0

こんにちは、 クエリは機能し、IDは作成された日付の順に表示されます。主キーをリセットして、以前の最大IDの代わりに1のIDで開始する方法はありますか? – Roys

0

から始まりますあなたしたいが、まだあなたがそれをしたい場合は、作成した日付に基づいて行番号列を取得するには、このクエリを使用することができます

select @row_num := @row_num + 1 as RowNumber, t.[PrimaryKeyColumn] from [tablename] t, (select @row_num := 0) x order by t.CreatedDate asc 

あなたはこのクエリに参加して、あなたのテーブルで、新しく作成された列にRowNumber関数列の値を挿入することができます主キーに基づいてテーブルを作成してからこの新しい列の主キーを作成し、古い主キー列を削除します。

+0

こんにちは、私はあなたのクエリを試して、それは素晴らしいです。エイリアス化されたカラムが作成されましたが、そのカラムをプライマリ・キーとしてテーブルに追加し、プライマリ・キーである古いIDカラムを削除するにはどうすればよいですか?私が試したクエリで編集を追加しましたが、私は構文が間違っているとわかりません。 – Roys

関連する問題