給定一個表像之下,是有一個單一查詢的方式來更新此表:是否有可以跨多個組更新「序列號」的單個查詢?
| id | type_id | created_at | sequence |
|----|---------|------------|----------|
| 1 | 1 | 2010-04-26 | NULL |
| 2 | 1 | 2010-04-27 | NULL |
| 3 | 2 | 2010-04-28 | NULL |
| 4 | 3 | 2010-04-28 | NULL |
對此(注意created_at
用於排序和sequence
由type_id
「分組」):
| id | type_id | created_at | sequence |
|----|---------|------------|----------|
| 1 | 1 | 2010-04-26 | 1 |
| 2 | 1 | 2010-04-27 | 2 |
| 3 | 2 | 2010-04-28 | 1 |
| 4 | 3 | 2010-04-28 | 1 |
我已經看到了一些代碼,在此之前,使用如下所示的@變量,我認爲可能的工作:
SET @seq = 0;
UPDATE `log` SET `sequence` = @seq := @seq + 1
ORDER BY `created_at`;
但是,顯然不會將每個type_id的序列重置爲1。
如果沒有單一查詢的方式來做到這一點,最有效的方法是什麼?
此表中的數據可能會被刪除,所以我打算在用戶完成編輯以重新排序表後運行存儲過程。
這是非常非常聰明的東西!謝謝! – Drarok 2010-04-30 10:34:33