2011-08-16 63 views
6

我使用的是php和mysql。我有一個ID列設置爲自動增量作爲主鍵的表。我試圖添加另一個名爲sort_order的列。插入行時,sort_order列應該自動增加。然後用戶將能夠更改sort_order值。但MySQL不允許自動增加多個列?mysql中的多個自動增量

什麼是自動增加sort_order值的最佳方式?

通過熱門請求,一些更多的解釋。

在管理區域中,用戶將擁有一個類別列表。使用javascript,用戶可以拖動他們想要的類別的順序。腳本然後發佈新順序中的所有id的列表,以及舊順序中的sort_order值。

然後我有一個php函數,它用新的sort_order值更新mysql。

所有這些都已經完成,除了我手動填寫了所有sort_order值。我希望它能夠在用戶創建新類別時具有價值。

然後,我可以使用sort_order在前端正確顯示類別順序。

我已經做好了一切。但是在開發中,我手動填充sort_order的值。

+0

你能告訴我們更多關於你如何使用'sort_order'列嗎? –

+2

究竟需要第二個auto_increment列?我不明白這背後的推理。 – pkk

+0

如果您可以詳細瞭解使用情況,可以建議更好的替代方案。 – ThinkCode

回答

1

您可以使用trigger插入時更新您的行,或者選擇在查詢產生的時間在PHP代碼中適當的值。

但是,您應該考慮是否真的需要創建自動遞增的sort_order值。在你的顯示代碼中,你可以對已經被賦予顯式排序順序的項目進行排序,並將剩餘的未排序項目放在列表中的適當位置(底部?)。

7

默認情況下,您可以將排序的列等於NULL。你唯一需要的是一個更聰明的查詢。例如:

select * 
from something 
order by ifnull(sort, id) 
0

您可以在排序順序排序sort_order + id存儲0,然後。結果將是相同的,因爲sort_order將精確爲0而不是id(在id上減去)

1

也許添加一個時間戳並對其進行排序,這實際上爲您的數據模型增加了含義。 「sort_order」列意味着您要將演示(視圖)邏輯放入您的數據模型中,這是一件糟糕的事情。

+0

取決於實際使用情況,但有時排序順序實際上是數據模型imo的一部分。考慮一個畫廊。是的,排序順序與演示有關,但它也是模型的一部分,因爲演示順序對整個畫廊來說都是任意的和重要的。你不能只用主鍵或時間戳,因爲這些值是靜態的。在這種情況下,分揀鍵很有意義。 – pzuraq