2011-07-07 32 views
1

我試圖爲記錄列表實現自定義排序字段。當我創建新記錄時,默認情況下,我希望此字段與該記錄的ID號相匹配。有沒有辦法實現這一點,而不必執行兩個查詢?MySQL - 在創建時將列名設置爲ID?

任何意見讚賞。

感謝

+0

聽起來像一個奇怪的計劃......你能舉個例子嗎? –

+0

是的,爲什麼不按ID排序呢? – kusut

+0

我只希望它默認設置爲ID。一旦用戶創建了它,他們可以通過在HTML表格中向上或向下拖動來重新排序記錄,該表格通過AJAX調用來更新記錄。 – Dan

回答

0

您可以通過使用

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

這會給你的下一個AUTO_INCREMENT價值得到next自動遞增ID。

然後進行前INSERT觸發器:

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
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:

ORDER BY ifnull(sort_field, id) 
0

將其設置爲空或類似的東西在默認情況下,讓您的查詢sort by id if the sort field is null。 PseudoSQL:

SELECT blah, IFNULL(t.sort, t.id) AS sortval 
FROM t 
ORDER BY sortval 
-2

您可以使用MAX(ID)表達你的下一個0123,以確保將是更大的ID + 1:

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

希望這會有所幫助,再見!

+1

錯了。 MAX(id)+1並不總是等於自動遞增的id。 – Karolis

相關問題