2011-07-07 11 views
1

私はレコードのリストのためのカスタムソートフィールドを実装しようとしています。新しいレコードを作成すると、デフォルトではこのフィールドはそのレコードのID番号と一致するようにします。 2つのクエリを実行せずにこれを達成する方法はありますか?MySQL - 作成時に列名をIDに設定しますか?

アドバイスありがとうございます。

ORDER BY ifnull(sort_field, id) 
+0

奇妙な計画のような音...例を挙げることはできますか? –

+0

ええ、なぜIDでソートしないのですか? – kusut

+0

私はデフォルトでIDに設定したいだけです。ユーザーが作成したレコードは、AJAX呼び出しを使用してレコードを更新するHTML表内で上または下にドラッグして並べ替えることができます。 – Dan

答えて

0

あなたはこれがあなたに AUTO_INCREMENT値を与える

SHOW TABLE STATUS FROM tablename LIKE Auto_increment 
/*or*/ 
SELECT `auto_increment` FROM `INFORMATION_SCHEMA.TABLES` WHERE table_name = 'tablename' 

を使用してnext自動インクリメントIDを取得することができます。

そして、前に挿入トリガます

DELIMITER $$ 

CREATE TRIGGER bi_table1_each BEFORE INSERT ON table1 FOR EACH ROW 
BEGIN 
    DECLARE next_id integer; 
    SELECT `auto-increment` FROM `INFORMATION_SCHEMA.TABLES` INTO Next_id 
    WHERE TABLE_NAME = 'table1' LIMIT 1;  
    SET new.sortcolumn = next_id; 
END $$ 

DELIMITER ; 

リンク
http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html
あなたはあなたの次の0123ことを確認するためにMAX(ID)表現を使用することができますhttp://dev.mysql.com/doc/refman/5.0/en/tables-table.html
http://dev.mysql.com/doc/refman/5.0/en/triggers.html
http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html

0

NULLまたはデフォルトではそのような何かとあなたのクエリを作ってそれを設定します:私はあなたがデフォルトでNULLに等しいこのフィールドを残すことができ、その後、クエリで、これがないと思う

おかげ

-2

をさようなら、このことができます

INSERT INTO table_name (..., sort_field) VALUES (..., MAX(id)+1) 

希望:は大きいID + 1になります!

+1

間違っています。 MAX(id)+1は必ずしも自動増分IDと等しいとは限りません。 – Karolis

関連する問題