在做投票活動的時候,經常為遇到頁面展示時需要根據投票顯示當前排名情況,通過mysql可以簡單實現該功能。
select
id,user_name,
user_id,
net_ballots,
(@i :=@i + 1) as no
from
vote_user_video_info,
(select @i := 0) as it
order by
net_ballots desc
說明:
id為記錄主鍵
user_name為作者名稱
user_id為作者id
net_ballots為投票數
no為投票排名
後來需求要求有兩種排序方法,一種是按排名顯示列表,另一種是按最近記錄顯示列表並顯示對應記錄的排名。
這樣的話,只要在上面的sql中新增乙個建立時間字段,然後再根據時間排序或者排名排序即可。
select
*from
( select
id,user_name,
user_id,
net_ballots,
audit_time,
(@i :=@i + 1) as order_num
from
vote_user_video_info,
(select @i := 0) as it
order by
net_ballots desc
) as tmp_table
order by
tmp_table.order_num
不過這樣的方法,在資料量很大,並且qps較高的時候效能不是很好,可以採取索引的方法優化,或者實時性要求不高的情況下,可以用定時任務去實現統計,然後供查詢 SQL2008根據日誌恢復
網上收集的一篇文章,忘記是 的了.做個記號.建立測試資料庫 create database dbgo 對資料庫進行備份 backup database db to disk c db.bak with format go 建立測試表 create table db.dbo.tb test id in...
SQL 2008根據條件拆分列
在為人事局做報表過程中,遇到乙個棘手的問題,客戶要求把資料庫中的一列資料根據條件分成多列。比如 資料庫中有省份這麼一列資料 客戶要求根據省份分類,河北省一列 北京市一列 天津市一列,剩下的為其他,目標效果如下 手工編寫的sql語句version1.0版 select 河北 parsename pro...
1356 根據數字二進位制下 1 的數目排序
hello aohy 今天呢做了個決定好好學演算法,嗯,力扣每日打卡,希望你能堅持下去。這是鏈結 看到題目首先想到的就是暴力排序了,但是注意到 大小是有兩個規則 所以簡單點的想法就是計算每個數二進位制表示中1的個數,統計比較輸出就行。然後我去看題解了。然後我知道了sort的重寫規則樣式 這樣的cla...