這是一個沒有問題的問題,但是我從來沒有得到過直接的答案。
MySQL的最佳實踐問題:按ID或日期排序?
假設我有以下字段和值的數據庫表:
| id | date_added | balance |
+------------------------------------+
| 1 | 2009-12-01 19:43:22 | 1237.50 |
| 2 | 2010-01-12 03:19:54 | 473.00 |
| 3 | 2010-01-12 03:19:54 | 2131.20 |
| 4 | 2010-01-20 11:27:31 | 3238.10 |
| 5 | 2010-01-25 22:52:07 | 569.40 |
+------------------------------------+
這是一個非常基本的「佔」子系統。我想獲得最近的平衡。 id
字段設置爲auto_increment。通常情況下,我會用:
SELECT balance FROM my_table ORDER BY date_added DESC LIMIT 1;
但我需要絕對確保返回的值是最新的......(見ID#以上2 & 3)
1)我會過得更好用:
SELECT balance FROM my_table ORDER BY id DESC LIMIT 1;
2)或這會是一個更好的解決辦法?:
SELECT balance FROM my_table ORDER BY date_added,id DESC LIMIT 1;
據我所知,auto_increment
效果很好,但是否足夠可靠排序的東西這個關鍵的?這就是爲什麼我認爲通過這兩個字段進行排序是一個更好的想法,但是當我在過去完成這些時,我已經看到了MySQL中一些非常古怪的行爲。或者如果有更好的解決方案,我會很感激你的意見。
在此先感謝!
布賴恩
謝謝Pax! 實際上我有一個字段不在表格中,這就是user_id。我們有一個「信用」系統,我們的用戶可以用它來購買商品或服務,並且我們在這張表中保留了其餘額。爲了獲得他們的'當前餘額',我想從這個特定的表中選擇最近的餘額。上面的表格在進行交易時更新。 (交易全部存儲在單獨的表格中)。 我希望這是有道理的,哈哈。 – DondeEstaMiCulo 2010-01-30 04:04:36
嗯,這不是我會這樣做的方式,而是各自爲戰:-)我要麼根據他們所有的交易條目計算餘額(我的偏好,因爲有*沒有*數據越來越不合適這兩個表),或者只是爲每個用戶保留* 1 *記錄並且更新它。事實上,我現在無法推薦第二種選擇,現在我想到了它。您還需要小心使用當前的解決方案,因爲您將數據保存在兩個彼此不同的地方。 – paxdiablo 2010-01-30 04:07:28
那麼我們想保持平衡歷史,如果沒有別的,但內部報告的目的。我實際上已經考慮過你計算所有交易的想法,但是通過上述方法可能會更容易。也許我會重新考慮這個想法。 ;) 我很樂意聽到您可能有的任何其他想法或建議,即使它們是脫離主題,因爲我對會計類型數據庫模型沒有任何認識。 ;) 再次感謝! – DondeEstaMiCulo 2010-01-30 04:15:24