我試圖爲記錄列表實現自定義排序字段。當我創建新記錄時,默認情況下,我希望此字段與該記錄的ID號相匹配。有沒有辦法實現這一點,而不必執行兩個查詢?MySQL - 在創建時將列名設置爲ID?
任何意見讚賞。
感謝
我試圖爲記錄列表實現自定義排序字段。當我創建新記錄時,默認情況下,我希望此字段與該記錄的ID號相匹配。有沒有辦法實現這一點,而不必執行兩個查詢?MySQL - 在創建時將列名設置爲ID?
任何意見讚賞。
感謝
您可以通過使用
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
我想你可以將此字段默認,然後在查詢中這樣做等於NULL:
ORDER BY ifnull(sort_field, id)
將其設置爲空或類似的東西在默認情況下,讓您的查詢sort by id if the sort field is null。 PseudoSQL:
SELECT blah, IFNULL(t.sort, t.id) AS sortval
FROM t
ORDER BY sortval
您可以使用MAX(ID)
表達你的下一個0123,以確保將是更大的ID + 1:
INSERT INTO table_name (..., sort_field) VALUES (..., MAX(id)+1)
希望這會有所幫助,再見!
錯了。 MAX(id)+1並不總是等於自動遞增的id。 – Karolis
聽起來像一個奇怪的計劃......你能舉個例子嗎? –
是的,爲什麼不按ID排序呢? – kusut
我只希望它默認設置爲ID。一旦用戶創建了它,他們可以通過在HTML表格中向上或向下拖動來重新排序記錄,該表格通過AJAX調用來更新記錄。 – Dan