有十筆資料
根據 views
(int) 這個欄位做排序
一般的排序就只要 ORDER BY views DESC
就行
views 會根據某些事件加加減減形成數字
但如果要做到這樣:
每月有四周
第一周的所有資料的 views 跟往後第二 三周.....每一周都會有變化
資料庫要怎麼記憶說
當第一周結束時,來到第二周時,上周的 views 資料會重設(或是記錄在某處)所以第二周又會是新的排序?
跪求大神給個思路,萬分感謝~~
給你最單純的思路好了。
「歷史記錄」
1.我不會用第1 2 3 4週。而是會用每年度的第幾周(0~52)。做為週期依據
2.由於排序依據過了就不會再有變動性,認真來說。直接記錄其排序資料也就行了。
也就是說會有一個資料表關連式的紀錄,再用PHP根據日期範圍抓時間顯示
看好,我正在教你新的東西。
就是「每年度的第幾周(0~52)」
有這個就不需要日期範圍了。不懂這是啥鬼的話。再問吧。
好像懂了
想辦法找出如何判斷今天是第幾週
紀錄的時候也是丟這個數字進去(取代日期)
再根據今天是第幾週顯示紀錄的東西
你真要用週數去取代日期喔.都已經把 week(idate) 這樣範例給你看了.
其實我沒注意到你寫的sql已經有我說的週數了。
我就是想要教他用week沒錯。
create table ithelp190726 (
id int unsigned not null auto_increment primary key
, idate date not null
, val int unsigned not null
);
insert into ithelp190726 (idate, val)
select adddate('2019-01-01', @num := @num + 1)
, round(rand() * 100)
from performance_schema.GLOBAL_STATUS a
, (select @num := 0) b
limit 10;
insert into ithelp190726 (idate, val)
select adddate('2020-01-01', @xnum := @xnum + 1)
, round(rand() * 100)
from performance_schema.GLOBAL_STATUS c
, (select @xnum := 0) d
limit 10;
select *
, YEAR(idate)
, WEEK(idate)
, rank() over (partition by YEAR(idate), WEEK(idate) order by val desc) as rnk
from ithelp190726;
+----+------------+-----+-------------+-------------+-----+
| id | idate | val | YEAR(idate) | WEEK(idate) | rnk |
+----+------------+-----+-------------+-------------+-----+
| 4 | 2019-01-05 | 86 | 2019 | 0 | 1 |
| 1 | 2019-01-02 | 64 | 2019 | 0 | 2 |
| 2 | 2019-01-03 | 47 | 2019 | 0 | 3 |
| 3 | 2019-01-04 | 46 | 2019 | 0 | 4 |
| 6 | 2019-01-07 | 100 | 2019 | 1 | 1 |
| 10 | 2019-01-11 | 97 | 2019 | 1 | 2 |
| 5 | 2019-01-06 | 91 | 2019 | 1 | 3 |
| 9 | 2019-01-10 | 55 | 2019 | 1 | 4 |
| 8 | 2019-01-09 | 26 | 2019 | 1 | 5 |
| 7 | 2019-01-08 | 25 | 2019 | 1 | 6 |
| 16 | 2020-01-02 | 22 | 2020 | 0 | 1 |
| 17 | 2020-01-03 | 16 | 2020 | 0 | 2 |
| 18 | 2020-01-04 | 16 | 2020 | 0 | 2 |
| 22 | 2020-01-08 | 88 | 2020 | 1 | 1 |
| 23 | 2020-01-09 | 85 | 2020 | 1 | 2 |
| 24 | 2020-01-10 | 59 | 2020 | 1 | 3 |
| 25 | 2020-01-11 | 43 | 2020 | 1 | 4 |
| 19 | 2020-01-05 | 30 | 2020 | 1 | 5 |
| 21 | 2020-01-07 | 19 | 2020 | 1 | 6 |
| 20 | 2020-01-06 | 2 | 2020 | 1 | 7 |
+----+------------+-----+-------------+-------------+-----+
20 rows in set (0.00 sec)