私はレコードのリストのためのカスタムソートフィールドを実装しようとしています。新しいレコードを作成すると、デフォルトではこのフィールドはそのレコードのID番号と一致するようにします。 2つのクエリを実行せずにこれを達成する方法はありますか?MySQL - 作成時に列名をIDに設定しますか?
アドバイスありがとうございます。
ORDER BY ifnull(sort_field, id)
私はレコードのリストのためのカスタムソートフィールドを実装しようとしています。新しいレコードを作成すると、デフォルトではこのフィールドはそのレコードのID番号と一致するようにします。 2つのクエリを実行せずにこれを達成する方法はありますか?MySQL - 作成時に列名をIDに設定しますか?
アドバイスありがとうございます。
ORDER BY ifnull(sort_field, id)
あなたはこれがあなたに次 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
sort by id if the sort field is null。 PseudoSQL:
SELECT blah, IFNULL(t.sort, t.id) AS sortval
FROM t
ORDER BY sortval
NULLまたはデフォルトではそのような何かとあなたのクエリを作ってそれを設定します:私はあなたがデフォルトでNULLに等しいこのフィールドを残すことができ、その後、クエリで、これがないと思う
おかげ
をさようなら、このことができます
INSERT INTO table_name (..., sort_field) VALUES (..., MAX(id)+1)
希望:は大きいID + 1になります!
間違っています。 MAX(id)+1は必ずしも自動増分IDと等しいとは限りません。 – Karolis
奇妙な計画のような音...例を挙げることはできますか? –
ええ、なぜIDでソートしないのですか? – kusut
私はデフォルトでIDに設定したいだけです。ユーザーが作成したレコードは、AJAX呼び出しを使用してレコードを更新するHTML表内で上または下にドラッグして並べ替えることができます。 – Dan