php實現箭頭上下排序

來源:互聯網
上載者:User

有這樣一個需求,有一個列表,有一個操作順序的選項,這個順序操作是利用箭頭排序的。
點擊向上的箭頭,順序就升一個,點擊向下的箭頭,順序就降一個。
具體的功能如下所示:

我本來想用時間和order兩個欄位來控制,點擊向上,order+1,同時更新下排序時間。
在sql裡就先按order,再按時間排序。
但我發現如果建立一個項目,初始的排序都是0的話,點擊第一個條目向下時,就會使order變成-1,排到最後一位。

請教各位高手有沒有什麼更好的實現方法。

PS:有朋友說,點擊一次箭頭要重新更新一次所有的條目順序,但這樣效率太低了,我放棄這種方法。
補充:非常感謝各位的熱情,各位說的基本上都是同一種可行的方法,(可惜只能採納一個答案,不然我就都採納了。)
總結下我的方法,我在插入資料的時候,使用id作為order,這樣就確保order是唯一的欄位。接下來就是和最接近的一行資料的order進行值的交換。

回複內容:

有這樣一個需求,有一個列表,有一個操作順序的選項,這個順序操作是利用箭頭排序的。
點擊向上的箭頭,順序就升一個,點擊向下的箭頭,順序就降一個。
具體的功能如下所示:

我本來想用時間和order兩個欄位來控制,點擊向上,order+1,同時更新下排序時間。
在sql裡就先按order,再按時間排序。
但我發現如果建立一個項目,初始的排序都是0的話,點擊第一個條目向下時,就會使order變成-1,排到最後一位。

請教各位高手有沒有什麼更好的實現方法。

PS:有朋友說,點擊一次箭頭要重新更新一次所有的條目順序,但這樣效率太低了,我放棄這種方法。
補充:非常感謝各位的熱情,各位說的基本上都是同一種可行的方法,(可惜只能採納一個答案,不然我就都採納了。)
總結下我的方法,我在插入資料的時候,使用id作為order,這樣就確保order是唯一的欄位。接下來就是和最接近的一行資料的order進行值的交換。

order欄位插入資料時設定為目前時間,然後某條記錄點上(下)的時候找order小於(大於)本條記錄的第一條(差最小)的記錄,交換他們的order值

這樣無論列表多長,每次交換的成本都是 一句select where order < xx limit 1(索引)和兩次update

既然有了 order 欄位並且按這個排序,更新時間就沒有必要了。

點擊 order = n 這一行後面的向上的剪頭:

將 order = n 的 同 order = n - 1 的 order 值互換

點擊 order = n 這一行後面的向下的剪頭:

將 order = n 的 同 order = n + 1 的 order 值互換

方法一:排序欄位unique,升降時採用“就近替換”。這個的缺點是,插入記錄若要指定跟隨某行,會產生重排,最壞情況是全表,理想的只是插空。建議採用RAND擷取unique值,這樣可以產生空。此外重排的時候最好加上事物,防止多人操作產生奇怪的事情。
方法二:兩個欄位進行排序,允許排序欄位重複,用額外欄位來確定等值“排序欄位”的排序。
方法三:排序欄位是字串XXXBBB,XXX是主序欄位,BBB是輔助排序欄位

PHP配合JQUERY來做吧,互動方面會最佳化很多,比如使用JQUERY排序後,AJAX 傳回給PHP,PHP計算排序或交換排序

吐槽個:什麼年代了,還用上下箭頭排序,果斷應該用js來搞拖動排序

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.